(function f(){
function f(){ return 0; }
console.log(f());
function f(){ return 1; }
})();
为什么上面的代码给了我 1 作为结果?
(function f(){
function f(){ return 0; }
console.log(f());
function f(){ return 1; }
})();
为什么上面的代码给了我 1 作为结果?
您定义了一个名为 的立即调用函数表达式 (IIFE) f
。在 IIFE 的范围内,您定义了两个名为f
. 由于提升了两个函数声明将被移动到范围的顶部,后者f
将覆盖第一个f
声明。
提升内部功能后:
(function f(){
function f(){ return 0; }
function f(){ return 1; }
console.log(f());
})();
IIFE 在这里完全无关紧要,在 javascript 函数和变量中被提升,这就是你可以这样做的原因
hoisted(); // logs "foo"
function hoisted() {
console.log("foo");
}
在定义之前调用函数的位置。
在您的示例中,代码在提升后最终成为
function f(){ return 0; }
function f(){ return 1; }
console.log(f()); // logs "1"