Javascript 匿名函数名在浏览器之间的行为是否不同?
我在书中做了一些练习,我遇到了这个例子:Javascript 匿名函数名在浏览器之间的行为是否不同?,javascript,anonymous-function,Javascript,Anonymous Function,我在书中做了一些练习,我遇到了这个例子: var canFly=function(){return true;} window.onload=函数(){ log('Assert:'+window.canFly.name+''); } 我想这是你的答案: 基本上,这是Chrome开发工具的“智能”,而且这种行为显然得到了较新的JS标准的支持。我想这是你的答案: 基本上,这是Chrome开发工具的“智能”,而且这种行为显然得到了较新的JS标准的支持。 ES5规范没有说明函数的.name属性,因此
var canFly=function(){return true;}
window.onload=函数(){
log('Assert:'+window.canFly.name+'');
}
我想这是你的答案:
基本上,这是Chrome开发工具的“智能”,而且这种行为显然得到了较新的JS标准的支持。我想这是你的答案: 基本上,这是Chrome开发工具的“智能”,而且这种行为显然得到了较新的JS标准的支持。
- ES5规范没有说明函数的
属性,因此它应该是.name
未定义的
- (某些)浏览器仍然将函数名作为功能实现,匿名函数将没有名称,因此应该是
”。此外,开发人员工具将更聪明,并为调试目的命名一些匿名函数(但不给它们一个“
属性).name
- ES6规范为分配给变量的匿名函数表达式提供了一个
属性,因此它应该是.name
“canFly”
现在选择你认为正确的那些:-你的书可能有点过时了,FF在实现这个新的ES6特性方面有点落后。
.name
属性,因此它应该是未定义的
“
”。此外,开发人员工具将更聪明,并为调试目的命名一些匿名函数(但不给它们一个.name
属性).name
属性,因此它应该是“canFly”
现在选择你认为正确的那些:-你的书可能有点过时了,FF在实现这一新的ES6特性方面有点落后。
< P>当你阅读一本关于不断变化的Web技术的书时,期望一些或全部的信息会过时。 在ES5中,没有为定义name
属性,也没有为定义属性
在ES2015中,
名称
属性定义为:
name属性的值是描述函数的字符串。该名称没有语义意义,但通常是一个变量或属性名称,用于在ECMAScript代码的定义点引用函数。此属性具有属性{[[Writable]]:false、[[Enumerable]]:false、[[Configurable]]:true}
没有与此规范关联的上下文名称的匿名函数对象没有name own属性,但继承了%FunctionPrototype%的name属性
它还被定义为:
函数原型对象的name属性的值是空字符串
还有一个定义为的算法,它似乎可以处理在各种情况下分配名称
属性,例如当函数用作对象文本的一部分时
这是我挖的兔子洞最深的地方。如果Chrome和Firefox对
SetFunctionName
的支持程度不同,或者ES2015和ES2017规范之间存在差异,导致您看到的行为,我不会感到惊讶。当您阅读一本关于不断变化的web技术的书时,预计部分或全部信息将过时
在ES5中,没有为定义name
属性,也没有为定义属性
在ES2015中,
名称
属性定义为:
name属性的值是描述函数的字符串。该名称没有语义意义,但通常是一个变量或属性名称,用于在ECMAScript代码的定义点引用函数。此属性具有属性{[[Writable]]:false、[[Enumerable]]:false、[[Configurable]]:true}
没有与此规范关联的上下文名称的匿名函数对象没有name own属性,但继承了%FunctionPrototype%的name属性
它还被定义为:
函数原型对象的name属性的值是空字符串
还有一个定义为的算法,它似乎可以处理在各种情况下分配名称
属性,例如当函数用作对象文本的一部分时
这是我挖的兔子洞最深的地方。如果Chrome和Firefox对
SetFunctionName
的支持程度不同,或者ES2015和ES2017规范之间存在差异,导致您看到的行为,我也不会感到惊讶
变量和方法可以从中推断匿名函数的名称
其语法位置(ECMAScript 2015中新增)
读一下这本书可能会有帮助
变量和方法可以从中推断匿名函数的名称
其语法位置(ECMAScript 2015中新增)
读一下可能会有帮助。什么书?它是什么时候写的?《JavaScript忍者的秘密》,2013年。在ES6中,函数名是从赋值目标推断出来的。匿名函数通常没有
name
属性,直到您将它们命名为var x=function x(){}
(参见第二个x)。看起来Chrome总是在前面,在这种情况下检测正确的名称来帮助您调试程序什么书?那是什么时候的令状
var f = function() {};
var object = {
someMethod: function() {}
};
console.log(f.name); // "f"
console.log(object.someMethod.name); // "someMethod"