Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关于函数声明的混淆_Javascript_Function - Fatal编程技术网

Javascript 关于函数声明的混淆

Javascript 关于函数声明的混淆,javascript,function,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函数不仅

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

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

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

从中可以看出(“标识符”指函数的名称,即
函数标识符(){}
):

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


但是我可以删除
b

不,你不能。当您传递任何不是对
delete
的引用或该引用无法解析时


这是一篇关于函数定义的好文章: