严格模式('use strict')有什么作用?
请说明严格模式的作用、启用方式和主要变化。
回答
专业代码师
严格模式(Strict Mode):在代码中启用更严格的语法检查和错误处理,消除 JavaScript 一些静默错误行为。
启用方式:
'use strict'; // 全局严格模式
function f() {
'use strict'; // 函数级严格模式
}
ES6 模块和 class 默认启用严格模式。
主要变化:
-
变量必须声明:意外创建全局变量抛
ReferenceErrorx = 10;→ ❌ ReferenceError
-
this 在普通函数中为 undefined:非严格模式下指向
windowfunction f() { console.log(this); } f();→undefined
-
禁止删除不可删除属性:
delete Object.prototype→ ❌ TypeError
-
禁止重名参数和属性:
function f(a, a) {}→ ❌ SyntaxError{ a: 1, a: 2 }→ ❌ SyntaxError
-
禁止八进制语法:
0123→ ❌ SyntaxError(0o123✅) -
禁止 with 语句:
SyntaxError -
对只读属性赋值抛 TypeError:
NaN = 1→ ❌ TypeError -
eval 不向外层作用域引入变量:
eval有独立作用域
安全增强:arguments.callee、arguments.caller 禁用。