JS中严格模式与非严格模式下默认绑定的核心区别在于this指向:非严格模式指向全局对象(如window),严格模式为undefined;触发条件均为独立函数调用(如foo()、setTimeout(foo,100))。

JS 中严格模式和非严格模式下默认绑定的核心区别,只在于 this 的指向:非严格模式下指向全局对象(浏览器中是 window),严格模式下直接是 undefined。
默认绑定触发条件
当函数以「独立调用」方式执行时,就触发默认绑定——也就是没有点号(.)、没有 call/apply/bind、也没有作为构造函数或箭头函数使用。例如:
foo()setTimeout(foo, 100)function bar() { return this; }; bar()
非严格模式下的表现
在未启用严格模式时,这类调用会让 this 自动绑定到全局对象:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 浏览器环境:指向
window,所以console.log(this === window)输出true - Node.js 环境:指向
globalThis(等价于global) - 如果函数内访问未声明变量,还会隐式挂到全局上(如
a = 123相当于window.a = 123)
严格模式下的表现
只要脚本或函数顶部写了 "use strict",默认绑定就不再兜底到全局:
-
this的值就是undefined,任何对this.xxx的读写都会立即报错(如TypeError: Cannot read property 'xxx' of undefined) - 避免了意外污染全局、掩盖逻辑错误,也更符合现代开发的预期
- ES6 模块(
.mjs或type="module"的 script)默认启用严格模式,无需手动加"use strict"
为什么这个区别很重要
它直接影响代码健壮性和可维护性:
- 非严格模式下,
this指向全局容易掩盖错误(比如本该是对象方法却独立调用了) - 严格模式让问题暴露得更早,便于调试;也强制开发者明确上下文,比如用
call或箭头函数来控制this - 现代构建工具(Webpack、Vite 等)默认开启严格模式,实际项目中几乎不会遇到非严格默认绑定的宽松行为

















