有人可以向我解释以下三个示例中发生的情况吗?我的想法是针对第一个示例,bar
它没有执行(这只是一个函数声明),所以在foo
执行时,输出是undefined
?对于第二个示例,bar
执行,以便返回值3。对于第三个示例,我不知道为什么会产生8。
// 1)
function foo() {
function bar() {
return 3;
}
}
foo(); // undefined
// 2)
function foo() {
function bar() {
return 3;
}
return bar();
}
foo(); // 3
// 3)
function foo(){
function bar(){
return 3;
}
return bar();
function bar() {
return 8;
}
}
foo(); // 8
您对示例1和2是正确的,所以我只介绍示例3。
看起来您在bar()
重新定义它之前就在调用它,但是function
声明会被特别对待。这些函数都是在首次输入包含范围时定义的,它们没有按顺序执行。如果同一函数有多个声明,则最后一个是有效的。因此,两者之间没有区别:
function bar() {
// version 1
}
return bar();
function bar() {
// version 2
}
和:
function bar() {
// version 2
}
return bar();
这是函数声明不同于将函数表达式分配给变量的方式。如果您改为:
function foo() {
var bar = function() {
return 3;
}
return bar();
var bar = function() {
return 8;
}
}
foo();
那它会回来的3
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句