1

如果我将命名函数分配给变量,为什么我无法访问命名函数:

var a = function b() {
    console.log("Hello World");
}
a() // hello world;
b() // b is not defined
b  // b is not defined

而此时,我不能删除a变量,但我可以删除b,当我删除 时ba的功能仍然可以

delete a //false
delete b //true
a()  //Hello World

b函数不只是由 引用a,而不是复制,那么为什么该a函数仍然存在?

4

1 回答 1

3

如果您使用命名函数表达式(不是函数声明!),则函数的名称只能在函数内部以可访问的形式访问。

规范(“标识符”是指函数的名称,即function Identifier() {}):

可以从FunctionExpressionFunctionBody内部引用FunctionExpression中的标识符,以允许函数递归地调用自身。但是,与 FunctionDeclaration 不同,FunctionExpression的标识符不能被引用,也不影响包含FunctionExpression的范围。


但我可以删除b

不,你不能。当您传递任何不是引用delete或引用无法解析的内容时,它将返回true.


这是一篇关于所有函数定义内容的精彩文章:http: //kangax.github.io/nfe/

于 2013-04-26T09:14:50.980 回答