2016-11-18 152 views
5

在DevTools控制台中检查函数的作用域时,我注意到了一个“脚本”作用域。经过一些研究后,似乎创建了letconst变量。脚本范围的目的是什么?

在脚本中的函数作用域而不constlet变量:

在脚本中的函数与 let可变的

the global scope

作用域:

a global scope and a script scope

然而,以下在控制台中打印1 - 脚本范围内的变量仍然可以从其他脚本访问ts:

<script>let v = 1</script> 
<script>console.log(v)</script> 

我听说过ES6模块,其中顶级变量将无法从模块外部访问。这是范围用于还是有其他目的?

回答

6

当您在顶层(即不在函数内部)使用var声明变量时,它会自动变为全局变量(因此在浏览器中,您可以将其作为window的属性进行访问)。这与使用letconst声明的变量不同 - 它们不会成为全局变量。您可以在另一个脚本标记中访问它们,但不能将它们作为window的属性进行访问。

见下面的例子:

<script> 
 
    var test1 = 42; 
 
    let test2 = 43; 
 
</script> 
 
<script> 
 
    console.log(test1); // 42 
 
    console.log(window.test1); // 42 
 
    console.log(test2); // 43 
 
    console.log(window.test2); // undefined 
 
</script>