JavaScript中的提升变量

时间:2016-02-28 17:48:08

标签: javascript self-invoking-function

(function f(){ 
  function f(){ return 0; } 
  console.log(f()); 
  function f(){ return 1; } 
})();

为什么上面的代码会给我1个结果?

2 个答案:

答案 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