为什么JavaScript在return语句之后允许函数声明?

时间:2013-12-21 08:02:41

标签: javascript

JavaScript允许这样:

function outside() {
    inside();
    return 44;

    function inside() {
        console.log("inside");
    }
}

当调用outside时,输出为:

inside
44

为什么这样做以及为什么它不能用于下面的其他语句:

function outside() {
    return 44;
    console.log("inside");
}

只打印44

5 个答案:

答案 0 :(得分:2)

因为文件首先被解析并且当时读取了函数定义。你在return之前调用这个函数,这样就可以了。大多数编程语言允许您在调用函数后定义函数,因为它们分两步工作:解析和执行。

答案 1 :(得分:2)

您看到的是悬挂的效果。当一个函数即将被执行时,在真正执行该函数之前,首先计算所有变量和函数声明。因此,您的第一个功能相当于

function outside() {
    function inside() {
        console.log("inside");
    }
    inside();
    return 44;
}

详细信息可在规范10.4.3 Entering Function Code10.5 Declaration Binding Instantiation中找到。

  

为什么JavaScript在return语句之后允许函数声明?

为什么这样定义的语言可能只能由Brendan Eich回答。

答案 2 :(得分:0)

在第一种情况下,首先执行函数inside然后返回..所以它返回44 ..

但是在第二种情况下,外部函数首先遇到返回,这意味着退出该函数,无论下面返回什么...所以它只打印44

答案 3 :(得分:0)

function outside() {
inside(); //calling inside();
return 44;

function inside() {
    console.log("inside");
}
} 

但是这里

function outside() {
return 44;
console.log("inside");
}

你刚回来时根本没有打电话给inside()

答案 4 :(得分:0)

功能声明:

function myName() {

}

功能表达:

var myName = function() {

};

这些是非常不同的,函数声明(1)是在解析Javascript时定义的,而不是在执行时定义的。而函数表达式(2)是在执行Javascript时定义的。

从技术上讲,它不是在return语句之后定义的。

至少这是我理解的方式。