JavaScript严格模式下全局调用函数this为何是undefined
时间:2026-08-12 | 作者:游戏探长 | 阅读:0严格模式下全局调用函数时,this 为 undefined,这是语言设计上主动切断默认绑定的结果,目的是防止全局污染。而在非严格模式下,出于历史原因,this 默认指向 window/global,更容易意外修改全局属性。
严格模式下全局调用函数时 this 为 undefined,不是“变出来的”。本质上,这是语言设计上主动切断默认绑定、防止误操作的结果。
它不改变函数本身,只改变调用时的执行上下文规则。
为什么非严格模式下 this 指向全局对象?
在早期 Ja vaScript 的设计里,像 foo() 这样的独立调用,因为没有明确挂在哪个对象上,this 就会默认指向全局对象。在浏览器环境中,这个全局对象就是 window。
这种处理方式看起来省事,但问题也很明显:如果不小心使用了 this,就可能顺手污染全局属性。
this.name = "test"实际改了window.nameconsole.log(this)看起来像在“当前环境”,但其实隐式绑定了全局
严格模式如何让 this 变成 undefined?
只要函数体运行在严格模式下,并且调用时走的是「默认绑定」这条路径,那么最终拿到的 this 就会是 undefined。
这里的「默认绑定」指的是:没有通过对象、call/apply/bind、构造函数,或者箭头函数这类方式显式或间接指定 this。
常见的触发方式主要有三种:
- 函数内部第一行写
"use strict"; - 整个脚本顶部加
"use strict"; - 使用 ES6 模块(
.mjs文件或),自动启用严格模式
它只影响默认绑定,不影响其他情况
这个规则非常精准,只作用于最基础的调用场景,其他方式不受影响。
obj.method()→this仍指向objfn.call({x:1})或fn.bind(obj)()→this由你指定,不会变成undefined- 箭头函数 → 不绑定
this,直接继承外层作用域,和严格模式无关
实际开发中这个设计有什么用?
把 this 设为 undefined,不是为了增加麻烦,而是为了更早暴露问题。
- 避免静默修改全局对象,提升代码安全性
- 让
this行为更可预测,减少调试时的猜测成本 - 配合 ESLint 的
no-invalid-this规则,能快速发现未正确绑定this的地方 - 在 TypeScript 中,编译器更容易推断类型,减少
any泛滥
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- JavaScript正则表达式批量处理HTML标签转义与替换方法
- 时间:2026-08-21
-
- JavaScript函数默认参数的精准JSDoc类型注解方法
- 时间:2026-08-21
-
- JavaScript设置Cookie的SameSite属性防范CSRF攻击
- 时间:2026-08-21
-
- JavaScript中BOM如何打开新的浏览器窗口标签
- 时间:2026-08-20
-
- JavaScript微任务队列在事件循环中的执行机制
- 时间:2026-08-20
-
- JavaScript中网络超时如何用流程控制实现中断
- 时间:2026-08-20
-
- JavaScript防抖函数原理与减少高频事件触发方法
- 时间:2026-08-20
-
- TypeScript六个颠覆认知的核心知识点解析
- 时间:2026-08-20
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15
