为什么我的代码执行return语句后定义的函数?

时间:2014-07-09 16:09:56

标签: javascript function

我有这段代码:

(function f(){
    function f(){ return 1; }
    return f();
    function f(){ return 2; }
 })();

为什么这段代码打印'2'?

3 个答案:

答案 0 :(得分:6)

函数声明被提升,因此在评估return语句之前处理它们。

第二个函数会覆盖第一个函数,因为它们具有相同的名称。

答案 1 :(得分:4)

在javascript中,函数定义被提升到其包含函数的顶部。

您的功能由浏览器解释如下:

(function f(){
    //Functions defined first
    function f(){ return 1; }
    function f(){ return 2; } //<- Hoisted to top, now this is what f is

    //Now the rest of the code runs
    return f();

 })();

答案 2 :(得分:2)

因为函数在return语句之前被提升和处理,所以你的最后一个函数f()返回2并且它会覆盖第一个函数。