[英]Javascript functions parsing order
有人可以详细解释为什么在以下函数中,返回值是1.5? javascript是从底部到顶部解析还是有更多内容?
(function f() {
function f() { return 1; }
return f();
function f() { return 2; }
function f() { return 1.5; }
})();
功能被“ 提升 ”到他们所居住的范围的顶部。
所以你的代码实际上是:
(function f() {
function f() { return 1; }
function f() { return 2; }
function f() { return 1.5; }
return f();
})();
QED:
(function f() {
function f() { return 1; }
return f();
function f() { return 1.5; }
function f() { return 2; }
})(); //=> 2
由于吊装,这相当于
(function f(){
var f;
f = function(){ return 1; };
f = function(){ return 2; };
f = function(){ return 1.5; };
return f();
})();
吊装可能很棘手,因为这里有两个方面。 首先,提升变量定义
变量的每个定义实际上都是其范围顶部的变量声明,以及定义所在位置的赋值。 1
接下来,提升每个函数初始化
函数初始化发生在父函数的顶部(在vars之上)。 由于名称已作为参数或函数存在的vars声明是no-ops,因此我们得到了一些令人惊讶的结果。 1
当js解释器首先进入函数时,它会查找所有var和函数结构(但不是匿名函数)并按照它们找到它们的顺序对它们进行调整,之后它开始从函数的开始执行代码。 在你的情况下f函数返回1.5是最后一个,所以它改变了previos 2 f功能
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.