[英]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.