繁体   English   中英

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

[英]Why does JavaScript allow function declarations after the return statement?

JavaScript允许这样做:

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

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

调用outside ,输出为:

inside
44

为什么这样做有效,为什么对以下其他语句无效?

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

仅打印44

因为首先分析文件,然后读取函数定义。 您在return之前就调用了该函数,因此可以正常工作。 大多数编程语言都允许您在调用函数后定义函数,因为它们全部都分两个步骤工作:解析和执行。

您所看到的是提升的效果。 当一个函数将要执行时,在真正执行该函数之前,首先评估所有变量和函数声明。 因此,您的第一个功能等效于

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

可以在规范10.4.3输入功能代码10.5声明绑定实例中找到详细信息。

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

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

在第一种情况下,首先执行内部函数,然后返回return..so,则返回44。

但是在第二种情况下,外部函数首先遇到return,这意味着无论下面返回什么,都从该函数退出...因此,它仅输出44

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

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

但在这儿

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

您只是返回根本不调用inside()

函数声明:

function myName() {

}

函数表达式:

var myName = function() {

};

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

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

至少我是这样理解的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM