JS 基础 ------ window
对象详解
在浏览器环境中,JavaScript 为我们提供了一个内置的全局对象:window
。
1. 什么是 window
对象?
-
window
代表浏览器的 窗口,我们可以通过它操作浏览器窗口。 -
同时,
window
也是 全局作用域的顶层对象:- 内置对象(如
String
、Number
)都挂载在window
上。 - 浏览器提供的宿主对象(如
document
、console
、setTimeout
)也挂载在window
上。
- 内置对象(如
👉 所以在全局作用域中访问变量或函数时,其实就是在访问 window
上的属性/方法。
2. window
的属性访问
我们既可以通过 window.xxx
访问属性,也可以直接访问:
scss
alert(3) // 等价于 window.alert(3)
window.alert(3) // 显示 3
3. 全局变量与 window
- 使用
var
声明的全局变量会自动挂载到window
对象中。 - 使用
let
和const
声明的变量 不会 挂载到window
,而是存储在一个"词法环境"中,更安全。
javascript
var b = 10
console.log(window.b) // 10
let x = 20
console.log(window.x) // undefined
4. 全局函数与 window
全局作用域下定义的函数(非严格模式)会成为 window
的方法:
scss
function fn() {
alert("哈哈")
}
window.fn() // 调用成功
5. 未声明直接赋值的变量
在非严格模式下,如果在函数里直接赋值而不使用 var
、let
、const
,这个变量会自动变成 window
的属性。
非常不推荐这种写法!
scss
function fn1() {
c = 3 // 自动变成 window.c = 3
}
fn1()
console.log(c) // 3
在严格模式('use strict'
)下,这种写法会直接报错。