在严格模式下,函数以默认绑定方式调用时,this 的值是 undefined;默认绑定指函数裸调用(如 foo()、setTimeout(foo, 100)、const fn = obj.method; fn()),不依赖对象前缀、new 或显式绑定,且严格模式下 this 不再指向全局对象而是明确为 undefined,访问 this 属性会直接报错。

在严格模式下,函数以默认绑定方式调用时,this 的值是 undefined。
什么是默认绑定
默认绑定发生在函数被“裸调用”时——也就是没有对象前缀、没用 new、没用 call/apply/bind 的独立调用,例如:
foo()setTimeout(foo, 100)const fn = obj.method; fn()
严格模式下的表现
只要函数体顶部有 'use strict'(或整个脚本处于严格模式),默认绑定就不再把 this 指向全局对象,而是明确设为 undefined:
'use strict';
function checkThis() {
console.log(this); // undefined
}
checkThis();
此时若尝试访问 this.xxx,会直接报错:Cannot read property 'xxx' of undefined,而不是静默返回 undefined 或意外读到全局变量。
和非严格模式的关键区别
- 非严格模式:默认绑定 →
this是window(浏览器)或globalThis(Node.js) - 严格模式:默认绑定 →
this是undefined - 这个设计是为了避免意外污染全局对象,也使错误更早暴露
常见陷阱提醒
即使外层是严格模式,箭头函数仍不遵循默认绑定规则——它不绑定自己的 this,而是继承外层作用域的 this 值。而普通函数只要满足“独立调用 + 严格模式”,就一定得到 undefined。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











