繁体   English   中英

Javascript函数解析顺序

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

jsFiddle Demo

由于吊装,这相当于

(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

1: 范围Cheatsheet MDN

当js解释器首先进入函数时,它会查找所有var和函数结构(但不是匿名函数)并按照它们找到它们的顺序对它们进行调整,之后它开始从函数的开始执行代码。 在你的情况下f函数返回1.5是最后一个,所以它改变了previos 2 f功能

暂无
暂无

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

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