相关疑难解决方法(0)

如何从该函数中获取函数名?

如何从该函数内部访问函数名?

// parasitic inheritance
var ns.parent.child = function() {
  var parent = new ns.parent();
  parent.newFunc = function() {

  }
  return parent;
}

var ns.parent = function() {
  // at this point, i want to know who the child is that called the parent
  // ie
}

var obj = new ns.parent.child();
Run Code Online (Sandbox Code Playgroud)

javascript function

242
推荐指数
12
解决办法
21万
查看次数

为什么`obj.foo = function(){};`不将名称`foo`分配给函数?

从ES2015(ES6)开始,函数具有适当的名称(包括官方name属性),除了明显的函数声明和命名函数表达式(例如赋值给变量)之外,还以各种方式创建函数时分配名称(函数的名称设置为变量的名称),分配给对象属性(函数的名称设置为属性的名称),甚至函数参数的默认值(函数的名称设置为参数的名称).但是,在现有对象上(例如,不在对象初始值设定项中)分配属性不会将该属性的名称分配给该函数.为什么不?当然必须有一个特定的理由,这是不可取的/可能的.它以前如何?

要明确:我不是在问如何解决它.我问是什么阻止了这个看似很明显的案例在被许多其他人(包括默认参数值!)处理时被处理.一定有充分的理由.

请不要推测或理论化.TC39有理由不包括它.我对这个原因感兴趣.我已经通过了TC39会议记录,但还没有找到它.到目前为止,我发现的最接近的是艾伦· 威尔夫斯 - 布洛克回复贝尔吉说,由于"各种反对意见",没有就此形式达成共识,但遗憾的是他没有说出那些反对意见.

细节:

以下所有内容都foo兼容的浏览器上为该功能指定名称:

// Requires a compliant browser

// Assigning to a variable or constant...
// ...whether in the initializer...
{
    let foo = function() { };
    console.log("1:", foo.name); // "foo"
}
{
    const foo = function() { };
    console.log("2:", foo.name); // "foo"
}
// ...or later...
{
    let foo;
    foo = function() { };
    console.log("3:", foo.name); // "foo"
}
// As …
Run Code Online (Sandbox Code Playgroud)

javascript function ecmascript-6

53
推荐指数
1
解决办法
2325
查看次数

如何在 Chrome 的性能分析器中调试匿名 JavaScript 函数?

我正在使用 Angular 4,并且使用了很多匿名箭头函数 ( () => {})。是否可以在不给出名称的情况下确定我正在 Chrome 性能分析器中调试哪些函数?

这是我正在查看的示例;

截屏

javascript performance google-chrome google-chrome-devtools angular

6
推荐指数
1
解决办法
2799
查看次数

ES6模块箭头功能导出不保留其名称

为什么导出的箭头函数不保留其名称,是否有办法让它们这样做?

给出如下的ES6模块:

myModule.js

export function doSomeWork1() {
}
export const doSomeWork2 = () => {
};
Run Code Online (Sandbox Code Playgroud)

如果我然后将它们导入到另一个文件中,那么导出的函数会保留其名称,而箭头函数则不会.

example.js

import { doSomeWork1, doSomeWork2 } from './myModule';
console.log('doSomeWork1...');
console.log(doSomeWork1);
console.log(doSomeWork1.name); // name is retained    
console.log('doSomeWork2...');
console.log(doSomeWork2);
console.log(doSomeWork2.name); // name is NOT retained
Run Code Online (Sandbox Code Playgroud)

输出:

doSomeWork1...
[Function: doSomeWork1]
doSomeWork1
doSomeWork2...
[Function]
Run Code Online (Sandbox Code Playgroud)

如果我在ES6模块中声明一个箭头函数而不导出它并直接在该文件中打印它确实保留了它的名字.

myModule.js

const doSomeWork3 = () => {
};
console.log('doSomeWork3...');
console.log(doSomeWork3);
console.log(doSomeWork3.name); // name is retained 
Run Code Online (Sandbox Code Playgroud)

输出:

doSomeWork3...
[Function: doSomeWork3]
doSomeWork3
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

5
推荐指数
1
解决办法
915
查看次数

Es6箭头功能正常js

我一直试图了解es6箭头功能.我读了一些介绍它的文章.但我仍然没有完全得到它.

例如,我有这个代码:

sortedArticles(): Article[] {
    return this.articles.sort((a: Article, b: Article) => b.votes -  a.votes);
}
Run Code Online (Sandbox Code Playgroud)

它对下面的数组进行排序:

[
  new Article('Angular 2', 'http://angular.io', 3),
  new Article('Fullstack', 'http://fullstack.io', 2),
  new Article('Angular Homepage', 'http://angular.io', 1),
]; 
Run Code Online (Sandbox Code Playgroud)

如何在普通的旧js中看到相同的代码?我无法完全得到它.

javascript sorting ecmascript-6 arrow-functions

2
推荐指数
1
解决办法
1775
查看次数

gulpfile.js中的()=> {}是什么意思

我正处于js的学习之路,刚开始使用yeoman发电机.我使用gulp进行预处理和其他工作.当我浏览gulpfile.js时,我发现了这段代码.

gulp.task('serve', ['styles', 'html', 'watch'], () => {
    browserSync({
        notify: false,
        port: 9000,
        server: {
            baseDir: 'app'
        }
    })
});
Run Code Online (Sandbox Code Playgroud)

我可以理解,当我们执行时gulp-serve,它会运行样式,html和监视任务,并在端口9000中打开一个开发服务器.

但我不明白这() =>意味着什么.

如果有人能告诉我这意味着什么,将非常感激.

提前致谢.

javascript gulp gulp-browser-sync

1
推荐指数
1
解决办法
170
查看次数

箭头函数vs类方法内存占用

我正在阅读关于箭头函数(在打字稿上下文中).我遇到了这条线.

每个Handler类型的对象都会创建箭头函数.另一方面,方法只创建一次并附加到Handler的原型.它们在Handler类型的所有对象之间共享.

资料来源:https://www.typescriptlang.org/docs/handbook/functions.html

我无法理解.请回答是否有人可以解释.

javascript class-method typescript arrow-functions

1
推荐指数
1
解决办法
336
查看次数

为什么箭头函数名称必须为const / let?

我有一个带有react-native的tsx文件。如果函数未设置为const或不显示此消息,则我的函数名称带有下划线:

找不到名称“ goBack”

goBack = () => {
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

但是如果我设置const或让它起作用,它将起作用:

const goBack = () => {
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

为什么呢

typescript react-native tsx

1
推荐指数
1
解决办法
49
查看次数

ES2015 函数名推断在哪里定义?

我亲眼目睹了这种行为,后来发现了匿名函数(最显着的是新的箭头函数)的“名称推断”概念,但我一直无法找到这种行为的定义位置。以供参考:

// Arrow functions are inherently anonymous so this shouldn't work
const foo = () => {};
console.log(foo.name); // outputs "foo"
const bar = function() {};
console.log(bar.name); // outputs "bar"

// vs

console.log((() => {}).name) // outputs ""
console.log((function() {}).name) // outputs ""
Run Code Online (Sandbox Code Playgroud)

我发现的最接近的东西是在MDN 上,它将它归因于“ECMAScript 2015 中的新内容”。我试图搜索ES2015 规范,但没有运气。这似乎是现代 ES 的一个很大程度上未知但有用的功能,实际上几乎没有相关文档。

任何人都可以为此提供对规范规范的参考吗?

javascript specifications

1
推荐指数
1
解决办法
184
查看次数

匿名函数VS const函数--javascript

以下讨论:

我对JavaScript中的函数声明有疑问.

通过匿名函数声明我的意思是这样的(https://en.wikibooks.org/wiki/JavaScript/Anonymous_Functions):

var myFunction = function (fruit){
    alert('I like ' + fruit);
}
Run Code Online (Sandbox Code Playgroud)

而const我的意思是:

const myfunction = (fruit) => alert('I like ' fruit);
Run Code Online (Sandbox Code Playgroud)

使用匿名函数或使用const更快吗?我已经读过使用const允许在JavaScript中进行编译优化.有什么理由我应该使用一个而不是另一个?

这甚至是相关的吗?

javascript const function

0
推荐指数
1
解决办法
3347
查看次数

箭头功能难以追踪吗?

我刚才了解到,写下这个:

const setName = name => {
  // set name here
}
Run Code Online (Sandbox Code Playgroud)

与此相反,这是坏事

function setName(name) {
  //set name here
}
Run Code Online (Sandbox Code Playgroud)

原因是第一种方法使调试与该函数相关的问题变得困难,因为它不会出现在堆栈跟踪中.

问题:为什么这不会出现在堆栈跟踪中?

javascript ecmascript-6

0
推荐指数
2
解决办法
636
查看次数

当我用新函数定义函数时,函数的名称返回匿名

我试图用构造函数函数定义一个函数,如下所示,但为什么函数的名称返回匿名?

let sayHi = new Function('alert("Hello")');
//this will return anonymous
sayHi.name
Run Code Online (Sandbox Code Playgroud)

javascript

0
推荐指数
1
解决办法
56
查看次数

使用命名函数时如何处理事件删除将阻碍对上下文状态的访问

我正在侦听文件输入中的更改,并且每次需要“监听”某些内容后,都需要删除该侦听器。

问题在于,使用命名函数(无法删除匿名函数上的侦听器)时,我失去了上下文,因此无法访问状态。这是基本版本:

$ImgEl.on('change', () => {
  const reader = new FileReader();
    reader.onloadend = (e) => {
        // Do some stuff with state
        this.state.whatever;
    }
}
Run Code Online (Sandbox Code Playgroud)

通过将此代码与箭头功能配合使用,我可以维护上下文并因此可以访问自己的状态。但是,如果使用命名函数,则可以删除监听器,但会丢失上下文。

还有其他人处理过吗?

javascript jquery

0
推荐指数
1
解决办法
22
查看次数