JavaScript 词条目录
前端Wiki/词条/use strict 严格模式

use strict 严格模式

定义在文件或函数顶部声明 use strict,开启更严格的语法检查与更安全的运行规则

严格模式干掉的是 JS 历史包袱:未声明就赋值的变量不再静默成为全局变量,而是直接抛 ReferenceError;对只读属性赋值、删除不可配置属性、函数参数重名都会报错;this 不再默认指向全局对象(普通函数里是 undefined);with 语句被禁用,arguments 也不再同步参数变化。它把大量「能跑但埋雷」的写法挡在编译期。

现代项目几乎天然处于严格模式:ES 模块(import/export)默认开启,class 内部默认开启,Babel、TypeScript、打包工具编译输出也都会自动加上。需要手动写的场景是业务老脚本。加在文件最顶部作用于全局脚本,加在函数内只作用于该函数——推荐后者,避免 concat 打包时牵连其他文件。

JavaScript
// 非严格模式:静默创建全局变量
function sloppy() {
  leaked = '我跑出去了';
}
sloppy();
console.log(leaked); // 我跑出去了

// 严格模式:直接报错
'use strict';
function strict() {
  try {
    nope = '未声明';
  } catch (e) {
    console.log(e.name); // ReferenceError
  }
}
strict();

// 严格模式下普通函数 this 为 undefined
'use strict';
function whatIsThis() {
  console.log(this); // undefined(非严格是 window/global)
}
whatIsThis();

// 参数重名也禁止
'use strict';
try {
  // function f(a, a) {} // SyntaxError
} catch (e) { console.log('ok'); }
⚠ 常见误区
🔗 相关词条作用域错误处理
← 返回来源章节作用域