🚂 JavaScript 全局对象
全局对象提供可在 任何地方 使用的 变量 和 函数。默认情况下,这些全局变量 内建于语言或环境 中。
对于不同的环境:
- 浏览器中,
window
- Node.js 中,
global
- 标准名称
globalThis
。所有环境都应该支持该名称,所有主流浏览器都支持它。
🌰 例子:
alert("Hello");
// 等同于
window.alert("Hello");
1
2
3
2
3
🌰 例子 / 使用 var
声明的变量或函数会成为全局对象的属性。
var gVar = 5;
console.log(window.gVar);
1
2
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
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
2
3
4
编辑 (opens new window)
📢 上次更新: 2022/09/02, 10:18:16