1

我正在使用Google Chrome版本52 64位。 我发现,如果我使用匿名函数表达式ex。Google Chrome中的匿名函数表达式

// Anonymous function expression 
var expressionFunc = function(){ 
    return true; 
}; 

变量expressionFunc将持有指定的匿名函数, 但它也加入了名称属性expressionFunc这个功能。 所以,如果我在控制台expressionFunc.name, 它会给我expressionFunc

从我所知道的这个匿名函数表达式应该保持匿名, 而变量引用的函数不应该在函数的name属性中包含变量名称。

为什么chrome将name属性分配给一个匿名函数?

+0

这是我的理解,你不是在这里创建一个匿名函数,你只是用不同的语法声明函数。很高兴知道这个标准的人更加详细一点。匿名函数更像(function(){alert(true);})(); –

+1

Firefox中的行为是不同的,这表明它并不清晰。 –

+0

这被称为内联匿名函数表达式。这个函数没有名字,所以它是匿名内联函数,赋值给变量使其成为内联匿名函数表达式 – RuvenGam

回答

0

本页面:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Function/name

说实现ES6功能这

浏览器可以推断其句法位置的 匿名函数的名称。例如:

var f = function() {}; 
console.log(f.name); // "f" 

有该网页上没有特别的解释。

本页面

http://www.2ality.com/2015/09/function-names-es6.html

说,这

关于名字,箭头的功能就像是匿名函数表达式 :

 const func =() => {}; 
    console.log(func.name); // func 

从现在开始,无论何时看到匿名函数表达式,您都可以假设箭头函数的工作方式相同。

https://stackoverflow.com/a/37488652/1048572(引用@bergi)的答案非常全面,并指向规范中的源代码。

+0

请注意,浏览器做到了这一点推理,因为长期以来对于堆栈跟踪来说,只有在ES6之后,他们才能将其作为属性提供,并为何时做出规定。 – Bergi