Ethan Zhu
©️朱俊辉
All Rights Reserved.

多个script标签的作用域

当页面中存在多个<script>标签时,这时编译器会将多个标签处理成一个还是将多个分开处理呢,看下面所示的代码

<script>
    alert(a); //报错a is not defined
</script>
<script>
    var a = 123;
</script>

按正常思路来理解,var声明定的变量会先提升,正常理解的结果应该是undefined,但是这段代码会报 Uncaught ReferenceError: a is not defined 的错误,而不是undefined,所以可以看出编译器是按块进行编译的,

也就是说是按script标签一块一块进行编译的,在第一个块中,并没有声明a变量,(这也证明了a变量并没有被声明提前,直到第二个script内部才被提前的。)所以才会弹出这个错误,而不是undefined。

再看一个例子

<script>
    var b = 111;
</script>
<script>
    alert(b);// 弹出111
</script>

上面的代码执行结果是111,可以得出以下结论

1. script标签不是同时编译,而是视为一个script为一个代码块,挨个编译

2. 虽然不是同时编译,但是作用域是同一个也就是全局作用域,后编译的代码块可以使用前一个编译完成的代码块中的变量和函数

 

2017-01-21
暂无评论

发表评论