Global object

在網頁叫 window,在 node.js 叫 global。

// window 除了全域物件也可以做為視窗的物件
alert(window.innerHeight); // 显示浏览器窗口高度
window.open('http://google.com'); // 打开一个新的浏览器窗口
var x = 5;

// var 自動變成 window 屬性
alert(window.x); // 5 (变量 x 成为 window 的一个属性)
window.x = 0;
alert(x); // 0, 变量已修改

// let、const 不會
let x = 5;
alert(window.x); // undefined ("let" 不会创建窗口属性)

// 全域變數在不同腳本可以共用
<script>
  var a = 1;
  let b = 2;
</script>

<script>
  alert(a); // 1
  alert(b); // 2
</script>

// 全域 this 的值是 window
alert(this); // window

// 加上 module 腳本會有自己的作用域
<script type="module">
  var x = 5;
  alert(window.x); // undefined
</script>

// 不同腳本無法共用
<script type="module">
  let x = 5;
</script>

<script type="module">
  alert(window.x); // undefined
  alert(x); // 错误:未声明的变量
</script>

// this 的值不是 window
<script type="module">
  alert(this); // undefined
</script>

// 通常會減少全域變數,但若真有需要可能希望放到全域物件中
// 明确地将它分配给 `window`
window.currentUser = {
  name: "John",
  age: 30
};

// 然后,在另一个脚本中
alert(window.currentUser.name); // John

// 測試瀏覽器是否支持新功能
if (!window.Promise) {
  alert("Your browser is really old!");
}

// 自訂義新功能
if (!window.Promise) {
  window.Promise = ... // 自定义实现现代语言特性
}

Last updated