不同文件之间的提升

And*_*rea 2 javascript hoisting

有没有办法在不同文件中的源代码之间进行函数和变量提升?也就是说,像

//Inside firstfile.js
foo === "bar" //should return true
Run Code Online (Sandbox Code Playgroud)

和

//Inside secondfile.js
function bar() {
    this.foo = "bar";
}
Run Code Online (Sandbox Code Playgroud)

我想这是不可能的,因为大多数 javascript 引擎会按顺序解析和执行不同的文件,但我不确定。

我不知道这是否在 ECMA 的规范中,因为解析不同的文件并不是语言的真正组成部分。

Tim*_*own 5

我最初认为这是一个比实际看起来更有趣的问题。我认为这个问题的答案是每个<script>元素代表一个单独的Program,每个单独的 Program 在下一个 Program 发生任何事情之前被解析和(至关重要)执行,因此提升的效果只能在单个 Program 中看到。

例如,在单个脚本中:

<script type="text/javasscript">
    alert(typeof foo);
    function foo() {}
</script>
Run Code Online (Sandbox Code Playgroud)

... 警告“函数”,因为函数声明被提升,但将这两行拆分为单独的<script>元素会改变这一点:

<script type="text/javasscript">
    alert(typeof foo);
</script>
<script type="text/javasscript">
    function foo() {}
</script>
Run Code Online (Sandbox Code Playgroud)

... 警告“未定义”,因为第一个脚本在第二个脚本被解析之前执行。