2016-11-18 150 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>