关于功能声明的困惑

时间:2013-04-26 09:10:28

标签: javascript function

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

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函数仍然存在?

1 个答案:

答案 0 :(得分:3)

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

来自specification(“标识符”是指功能名称,即function Identifier() {}):

  

FunctionExpression 中的标识符可以从 FunctionExpression FunctionBody 中引用,以允许函数递归调用自身。但是,与 FunctionDeclaration 不同, FunctionExpression 中的标识符无法引用,也不会影响包含 FunctionExpression 的范围。


  

但我可以删除b

不,你不能。当您传递任何不是delete引用的内容或无法解析引用时,it will return true


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