【问题标题】:Anonymous function expression in Google Chrome [duplicate]Google Chrome 中的匿名函数表达式 [重复]
【发布时间】:2016-09-01 10:33:26
【问题描述】:

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

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

变量expressionFunc 将保存分配的匿名函数, 但它也在这个函数中添加了一个名称属性expressionFunc。 因此,如果我在控制台中执行expressionFunc.name, 它会给我expressionFunc

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

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

【问题讨论】:

  • 据我了解,您不是在这里创建匿名函数,您只是用不同的语法声明函数。对于更了解标准的人来说很高兴。匿名函数更像 (function () { alert(true); })();
  • 在 Firefox 中的行为有所不同,表明它并不明确。
  • 这称为内联匿名函数表达式。此函数没有名称,因此它是匿名内联函数,并且对变量的赋值使其成为内联匿名函数表达式
  • 抱歉忘记添加:(function () { alert(true); })();你的函数叫做自调用匿名函数。
  • 此代码:var expressionFunc = function somename(){}; console.log expressionFunc.name; 在所有浏览器中显示somename。只有 Chrome 为原始问题中的匿名函数命名。 (尝试过的浏览器:Edge、Firefox、Opera、Chrome)

标签: javascript google-chrome anonymous-function function-expression


【解决方案1】:

本页:

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 引用)的答案相当全面,并指向规范中的来源。

【讨论】:

  • 请注意,浏览器在很久以前就进行了此推断,以获取堆栈跟踪,只是从 ES6 开始,它们才将其作为属性提供,并且对于何时执行此操作有设定的规则。
猜你喜欢
  • 2012-09-27
  • 2014-05-23
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 2021-01-15
相关资源
最近更新 更多