2017-06-18 15 views
2

在JavaScript中,当我这样定义JavaScript如何分配函数的`name`属性?

function aaa(){}

功能我可以name属性后访问该名称:

aaa.name

将返回

"aaa"

然而,当我通过var定义功能,在技术上应该是匿名函数没有name属性:

var aaa=function(){}

但相反,它假定aaa是函数的名称,并将其分配给name属性:

aaa.name

也将返回

"aaa"

的JavaScript如何决定什么应该是name,特别是在考虑到分配可以使用更复杂的情况:

var aaa=bbb=function(){}var aaa=arr[0]=function(){}

+0

这是一个称为[推断函数名称](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#Inferred_function_names)的ES6功能。 – 4castle

回答

1

JavaScript声明name函数的变量,方法是在所有基本情况下,使用与函数相等的左侧参数,即'aaa'。在第一个复杂定义中,您声明的状态位于Javascript上方,将采用变量ab并将其分配给名称为'ab'的函数。在最后一个示例中,您提供的函数将函数设置为等于内存中的指针,该函数不是已定义的变量,因此name属性设置为空字符串,因为arr[0]不是变量名称,而是指向内存的指针。 这是显示这个的JSFiddle

0

事情是这样的:

推断函数名

变量和方法可以从 其句法位置(在ECMAScript中2015年新的)推断匿名函数的名称。

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

阅读整个blog。它将清除您的所有查询。