目录

🚂 JavaScript 全局对象

全局对象提供可在 任何地方 使用的 变量函数。默认情况下,这些全局变量 内建于语言或环境 中。

对于不同的环境:

  • 浏览器中, window
  • Node.js 中, global
  • 标准名称 globalThis 。所有环境都应该支持该名称,所有主流浏览器都支持它。

🌰 例子:

alert("Hello");
// 等同于
window.alert("Hello");
1
2
3

🌰 例子 / 使用 var 声明的变量或函数会成为全局对象的属性。

var gVar = 5;
console.log(window.gVar);
1
2

使用 var 声明的函数具有与函数声明相同的效果(一般函数使用 function ,而不是函数表达式)。

现代 JavaScript 中一般使用 JavaScript 模块。

🌰 例子 / 如果一个值非常重要,以至于它在全局范围内可用,那么可以直接将其作为属性写入:

window.currentUser = {
  name: 'Simon'
}

// ...
// 在代码中的另一个位置
console.log(currentUser.name) // 'Simon'

// 当存在相同命名的变量时
// 使用 window 显式获取
console.log(window.currentUser.name)
1
2
3
4
5
6
7
8
9
10
11

** 一般不建议这样使用全局变量。** 全局变量应该尽可能地少,与使用外部变量或全局变量相比,函数获取「输入」变量并产生特定「输出」的代码设计更加清晰,不易出错且更易于测试。

# Polyfills 给新功能提供兼容性

Polyfills 是 JavaScript 中用来为旧版本浏览器提供没有原生支持的新功能。能抹平不同浏览器对 API 的兼容性的差异。

🌰 例子 / 测试是否存在内建的 Promise 对象(在版本特别旧的浏览器中不存在),如果没有,则创建 Polyfills 利用全局对象添加环境不支持但在现代标准中存在的功能。

if (!window.Promise) {
  alert("Your browser is really old!");
  window.Promise = ... // 定制实现现代语言功能
} 
1
2
3
4
📢 上次更新: 2022/09/02, 10:18:16