为什么命名函数表达式不能使该名称在作用域内可访问,但仍然可以删除?

问题描述 投票:0回答:1

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

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

javascript function
1个回答
3
投票

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

来自规范(“标识符”指的是函数名称,即

function Identifier() {}
):

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


但我可以删除

b


不,你不能。当您传递任何不是对

delete

 的引用或引用无法解析时,
它将返回 true


这是一篇关于所有函数定义内容的精彩文章:

http://kangax.github.io/nfe/

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.