覆盖命名函数的name属性

时间:2015-02-10 11:57:06

标签: javascript

我有一个如下命名函数:

var foo = function ninjaFunc(){

};

在控制台中检查其名称,我找到了“ninjaFunc”,这是预期的:

console.log(foo.name); //-> "ninjaFunc"

我刚刚将foo.name重新分配给'aha'。它运行没有任何错误。

foo.name = 'aha'; //compiles without error

但重新审核foo.name,我又找到了“ninjaFunc”。但我认为它是“aha”,因为编译器在指定它时没有引发错误。

console.log(foo.name); //-> "ninjaFunc"

为什么这样?我缺少哪个概念?

1 个答案:

答案 0 :(得分:-1)

ECMAScript的规范性参考是ECMA-262,即语言规范。当前标准ES5未指定function instances名称属性。

然而,第6版的草案在§19.2.4.2中完成:

  

此属性具有{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:true}。

其中说你不能按§6.1.7.1写信给它(可写:false)。

实施可能已经实施了ed。 6行为与否。您需要测试各种浏览器以确定支持(例如,IE 6以及可能的更高版本不支持它。)