关于JavaScript执行上下文和提升的困惑

时间:2018-10-23 13:40:57

标签: javascript javascript-engine

我知道运行JavaScript代码时有两个阶段:创建阶段和执行阶段。

  1. 创建阶段遍历传递给函数的所有参数,并创建 argument 对象。然后,扫描代码以查找函数和变量声明。对于每个函数和变量,在变量对象中创建一个属性。每个“函数”属性都指向该函数,并且每个变量都设置为undefined。范围链和 this 变量也分别创建和定义,但这与我的问题无关。
  2. 执行阶段-代码正在逐行运行。

这说明了下一个代码:

function foo() {
    console.log("foo1");
}

foo();

function foo() {
    console.log("foo2");
}

控制台中的输出为:

foo2

这很有意义,因为首先会扫描代码,然后在第二阶段执行代码。

但是,如果我在HTML文件中声明了三个.js文件,如下所示:

<html>
    <head></head>
    <body>
        <script src="script.js"></script>
        <script src="script1.js"></script>
        <script src="script2.js"></script>
    </body>
</html>

script.js,script1.js和script2.js分别如下所示

script.js:

function foo() {
    console.log("foo1");
}

script1.js:

foo();

script2.js:

function foo() {
    console.log("foo2");
}

控制台中的输出为:

foo1

我希望foo2。

为什么不同的文件处理方式不同?我以为引擎会扫描包含的.strongs文件中的 ALL ,创建执行上下文对象,然后执行功能。基本上,我认为JavaScript函数(也称为对象)位于不同的文件中而不是单个文件中也没有任何区别。

谢谢您的解释。

0 个答案:

没有答案