2016-11-18 30 views
5

Khi kiểm tra phạm vi chức năng trong bảng điều khiển DevTools, tôi nhận thấy phạm vi "tập lệnh". Sau một chút nghiên cứu, dường như nó được tạo cho các biến số letconst.Mục đích của phạm vi kịch bản là gì?

Phạm vi của một hàm trong một kịch bản mà không const hoặc let biến:

the global scope

Phạm vi của một hàm trong một kịch bản với một biến let:

a global scope and a script scope

Tuy nhiên, sau bản in 1 trong bảng điều khiển - các biến trong phạm vi tập lệnh vẫn có thể được truy cập từ tập lệnh khác ts:

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

Tôi đã nghe nói về các mô-đun ES6 trong đó các biến cấp cao nhất sẽ không thể truy cập từ bên ngoài mô-đun. Đó có phải là phạm vi được sử dụng cho hoặc nó có mục đích nào khác không?

Trả lời

6

Khi bạn khai báo biến bằng cách sử dụng var ở cấp cao nhất (tức là không phải bên trong hàm), nó sẽ tự động trở thành biến toàn cục (vì vậy trong trình duyệt, bạn có thể truy cập biến đó làm tài sản của window). Nó khác với các biến được khai báo sử dụng letconst — chúng không trở thành biến toàn cục. Bạn có thể truy cập chúng trong một thẻ tập lệnh khác, nhưng bạn không thể truy cập chúng dưới dạng thuộc tính của window.

Xem ví dụ này:

<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>

Các vấn đề liên quan