JavaScript中this隐式丢失为何会指向全局对象
时间:2026-08-18 | 作者:游戏探长 | 阅读:0所谓隐式丢失,说白了就是 this 悄悄“脱钩”了。
在非严格模式下,它会指向全局对象,也就是 window;到了严格模式下,则会变成 undefined。
问题的根子在于,函数一旦经过赋值或作为参数传递,就可能脱离原来的对象上下文。等真正执行时,它已经成了独立函数调用,于是触发默认绑定规则。
这个情况并不少见。变量赋值、回调传入、通过解构取出方法、在数组方法里使用函数,或者把函数直接赋给事件监听器,基本都属于高频场景。
隐式丢失导致 this 指向全局(非严格模式下是 window,严格模式下是 undefined),根本原因在于函数调用时脱离了对象上下文,触发了默认绑定规则。
为什么一赋值就丢掉 this?
当写 const fn = obj.method 时,只是把函数引用复制给了 fn,并没有保留它和 obj 的关系。
后续调用 fn(),就等价于独立函数调用。Ja vaScript 引擎找不到任何对象前缀,于是按默认规则处理:
- 非严格模式 →
this绑定到全局对象(window) - 严格模式 →
this为undefined
哪些操作会引发隐式丢失?
不只是简单赋值,任何让方法“脱离对象调用形式”的场景都会触发:
- 作为回调传入:例如
setTimeout(obj.handleClick, 100) - 解构获取方法:
const { handleClick } = obj,再调用handleClick() - 数组方法中使用:
[1,2,3].map(obj.process) - 事件监听器直接传方法:
button.onclick = obj.onClick
为什么 console.log(this) 有时显示 window,有时报错?
这取决于是否启用严格模式:
- 没写
'use strict':访问this.a实际是访问window.a,如果window上没有该属性,就得到undefined - 写了
'use strict':this是undefined,再访问this.a就会抛出Cannot read property 'a' of undefined
关键不是“this 被改了”,而是“没被绑定”
隐式丢失的本质,不是 this 被错误地设成了 window。
而是函数根本没有进入隐式绑定流程。它压根没被当作对象方法来调用。
所以解决方向不是“修复 this”,而是确保函数执行时有明确的归属对象。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 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
精选合集
更多大家都在玩
大家都在看
更多-
- 以下哪种食材被称为“地下苹果” 蚂蚁庄园今日答案9.18
- 时间:2026-09-17
-
- 蚂蚁庄园今天答题答案2026年9月18日
- 时间:2026-09-17
-
- 蚂蚁庄园答题今日答案2026年9月18日
- 时间:2026-09-17
-
- 蚂蚁庄园小课堂2026年9月18日最新题目答案
- 时间:2026-09-17
-
- 小鸡答题今天的答案是什么2026年9月18日
- 时间:2026-09-17
-
- 蚂蚁庄园每日答题答案2026年9月18日
- 时间:2026-09-17
-
- 蔬菜洗完掉色,说明是被染色了,是真的吗 蚂蚁庄园今日答案9月18日
- 时间:2026-09-17
-
- 满襟蜡绘花纹巧染就花纹当绣裳说的是哪种传统技艺 蚂蚁新村今日答案2026.9.17
- 时间:2026-09-17
