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特性方面有点落后。

  • ES5规范没有说明函数的
    .name
    属性,因此它应该是
    未定义的

  • (某些)浏览器仍然将函数名作为功能实现,匿名函数将没有名称,因此应该是
    ”。此外,开发人员工具将更聪明,并为调试目的命名一些匿名函数(但不给它们一个
    .name
    属性)

  • ES6规范为分配给变量的匿名函数表达式提供了一个
    .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"