如果我将命名函数分配给变量,为什么我无法访问命名函数:
var a = function b() {
console.log("Hello World");
}
a() // hello world;
b() // b is not defined
b // b is not defined
此时,我无法删除
a
变量,但我可以删除b
,当我删除b
时,a
的功能仍然可以存在
delete a //false
delete b //true
a() //Hello World
b
函数不只是被a
引用,不是复制,那么为什么a
函数仍然存在?
如果您使用命名函数表达式(不是函数声明!),则函数的名称只能在函数内部访问。
来自规范(“标识符”指的是函数名称,即
function Identifier() {}
):
FunctionExpression中的标识符可以从FunctionExpression的FunctionBody内部引用,以允许函数递归地调用自身。但是,与 FunctionDeclaration 不同,FunctionExpression 中的标识符不能被引用,也不会影响包含 FunctionExpression 的范围。
但我可以删除不,你不能。当您传递任何不是对
b
delete
的引用或引用无法解析时,它将返回
true
。
http://kangax.github.io/nfe/。