别再写 c=3 了!window 对象的隐藏规则

JS 基础 ------ window 对象详解

在浏览器环境中,JavaScript 为我们提供了一个内置的全局对象:window

1. 什么是 window 对象?

  • window 代表浏览器的 窗口,我们可以通过它操作浏览器窗口。

  • 同时,window 也是 全局作用域的顶层对象

    • 内置对象(如 StringNumber)都挂载在 window 上。
    • 浏览器提供的宿主对象(如 documentconsolesetTimeout)也挂载在 window 上。

👉 所以在全局作用域中访问变量或函数时,其实就是在访问 window 上的属性/方法。


2. window 的属性访问

我们既可以通过 window.xxx 访问属性,也可以直接访问:

scss 复制代码
alert(3)          // 等价于 window.alert(3)
window.alert(3)   // 显示 3

3. 全局变量与 window

  • 使用 var 声明的全局变量会自动挂载到 window 对象中。
  • 使用 letconst 声明的变量 不会 挂载到 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. 未声明直接赋值的变量

在非严格模式下,如果在函数里直接赋值而不使用 varletconst,这个变量会自动变成 window 的属性。

非常不推荐这种写法!

scss 复制代码
function fn1() {
  c = 3  // 自动变成 window.c = 3
}
fn1()
console.log(c)  // 3

在严格模式('use strict')下,这种写法会直接报错。

相关推荐
Nan_Shu_61413 小时前
学习:JavaScript(1)
开发语言·javascript·学习·ecmascript
青衫码上行13 小时前
【Java Web学习 | 第三篇】CSS(2) - 元素显示模式
java·前端·学习
木木子999913 小时前
Next.js, Node.js, JavaScript, TypeScript 的关系
javascript·typescript·node.js
IT_陈寒13 小时前
Redis性能翻倍的5个冷门技巧,90%的开发者都不知道第3个!
前端·人工智能·后端
柑橘乌云_14 小时前
学习记录-package.json的scripts添加参数的方式有那些
前端·学习·node.js·json
清沫14 小时前
规训 AI Agent 实践
前端·ai编程·cursor
明仔的阳光午后15 小时前
React 入门 02:从单页面应用到多页面应用
前端·react.js·前端框架
.生产的驴15 小时前
React 页面路由ReactRouter 路由跳转 参数传递 路由配置 嵌套路由
前端·javascript·react.js·前端框架·json·ecmascript·html5
非凡ghost15 小时前
批量转双层PDF(可识别各种语言) 中文绿色版
前端·windows·pdf·计算机外设·软件需求
苏卫苏卫苏卫15 小时前
【码源】智能无人仓库管理系统(详细码源下~基于React+TypeScript+Vite):
前端·react.js·typescript·vite·项目设计·智能无人仓库管理系统·码源