别再写 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')下,这种写法会直接报错。

相关推荐
swipe1 分钟前
为什么 RAG 一定离不开向量检索:从文档向量化到语义搜索的工程实现
前端·llm·agent
OpenTiny社区29 分钟前
AI-Extension:让 AI 真的「看得到、动得了」你的浏览器
前端·ai编程·mcp
IT_陈寒31 分钟前
Redis缓存击穿:3个鲜为人知的防御策略,90%开发者都忽略了!
前端·人工智能·后端
竹林8182 小时前
在Web3前端用Node.js子进程批量校验钱包,我踩了这些性能与安全的坑
javascript·node.js
农夫山泉不太甜2 小时前
Tauri v2 实战代码示例
前端
yuhaiqiang2 小时前
被 AI 忽悠后,开始怀念搜索引擎了?
前端·后端·面试
红色石头本尊2 小时前
1-umi-前端工程化搭建
前端
真夜2 小时前
关于对echart盒子设置百分比读取的宽高没有撑开盒子解决方案
前端
楠木6853 小时前
RAG 资料库 Demo 完整开发流程
前端·ai编程
肠胃炎3 小时前
挂载方式部署项目
服务器·前端·nginx