(function f(){
function f(){ return 0; }
console.log(f());
function f(){ return 1; }
})();
为什么上面的代码会给我1个结果?
答案 0 :(得分:2)
定义名为f
的立即调用的函数表达式(IIFE)。在IIFE的范围内,您可以定义两个名为f
的函数。由于hoisting,两个函数声明将移动到作用域的顶部,而后者f
将覆盖第一个f
声明。
提升内部功能后:
(function f(){
function f(){ return 0; }
function f(){ return 1; }
console.log(f());
})();
答案 1 :(得分:0)
IIFE在这里完全不相关,在javascript函数和变量中都是悬挂的,这就是为什么你可以做到的
hoisted(); // logs "foo"
function hoisted() {
console.log("foo");
}
在定义函数之前调用函数 在您的示例中,代码在提升后最终成为
function f(){ return 0; }
function f(){ return 1; }
console.log(f()); // logs "1"
<强> Hoisting on MDN 强>