【发布时间】:2015-05-06 19:20:26
【问题描述】:
有人可以向我解释以下三个示例中发生了什么吗?
我的想法是第一个例子,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
【问题讨论】:
-
bar()在第三个示例中被声明了两次。由于第二个是最后声明的,因此它返回 8。 -
1) 在第一种情况下,如果您调用 foo(),则会执行 foo(),并且 bar() 现在可用。但为了执行该栏,您需要显式调用它。 2)在第二种情况下,您正在调用 foo(),并且在 foo() 中 bar 可用,并且您通过编写 return bar() 来调用 bar(); 3) 第三种情况,见第二种情况的解释。有关更多信息,请参阅:stackoverflow.com/questions/7295634/javascript-nested-function
-
如何显式调用bar?
-
@DaeYoung
return bar(); -
@DaeYoung 我的意思是,在第一种情况下,当你调用 foo() 时,bar() 是可用的,但你没有调用 bar() 函数,尽管它是可用的。
标签: javascript hoisting