JavaScript允许这样:
function outside() {
inside();
return 44;
function inside() {
console.log("inside");
}
}
当调用outside
时,输出为:
inside
44
为什么这样做以及为什么它不能用于下面的其他语句:
function outside() {
return 44;
console.log("inside");
}
只打印44
。
答案 0 :(得分:2)
因为文件首先被解析并且当时读取了函数定义。你在return
之前调用这个函数,这样就可以了。大多数编程语言允许您在调用函数后定义函数,因为它们分两步工作:解析和执行。
答案 1 :(得分:2)
您看到的是悬挂的效果。当一个函数即将被执行时,在真正执行该函数之前,首先计算所有变量和函数声明。因此,您的第一个功能相当于
function outside() {
function inside() {
console.log("inside");
}
inside();
return 44;
}
详细信息可在规范10.4.3 Entering Function Code和10.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语句之后定义的。
至少这是我理解的方式。