use strict详解
严格模式是 JavaScript 中的一种指令,通过在脚本文件或函数的顶部添加"use strict"来启用。它引入了一些额外的限制和规范,以提高代码的质量、安全性和可维护性。
# 1、变量必须声明,禁止使用未声明的变量
在严格模式下,所有的变量都必须通过 var、let 或 const 关键字进行声明,否则会抛出 ReferenceError。
"use strict";
x = 10; // ReferenceError: x is not defined
function foo() {
y = 20; // ReferenceError: y is not defined
}
1
2
3
4
5
6
2
3
4
5
6
# 2、删除变得更加严格
在严格模式下,无法删除函数、函数参数或通过 var 关键字声明的变量。
"use strict";
var x = 10;
delete x; // SyntaxError: Delete of an unqualified identifier in strict mode.
1
2
3
4
2
3
4
# 3、禁止使用重复的参数名
在严格模式下,函数参数名必须唯一,否则会抛出语法错误。
"use strict";
function foo(x, x) { // SyntaxError: Duplicate parameter name not allowed in this context
return x + x;
}
foo(2, 3);
1
2
3
4
5
6
2
3
4
5
6
# 4、禁止使用八进制字面量
在严格模式下,以 0 开头的数字字面量将被视为无效的八进制数字,而不是十进制数字。
"use strict";
var x = 012; // SyntaxError: Octal literals are not allowed in strict mode.
1
2
3
2
3
# 5、禁止使用 eval() 修改作用域
在严格模式下,eval() 函数执行的代码将在自己的独立作用域中运行,而不是共享所在作用域的变量。
"use strict";
var x = 10;
eval("var x = 20;"); // eval内部的x不会影响外部的x
console.log(x); // 10
1
2
3
4
5
2
3
4
5
# 6、禁止使用 eval() 和 arguments 作为变量名
在严格模式下,eval 和 arguments 不能被重新赋值,作为变量名使用会抛出语法错误。
"use strict";
var eval = 10; // SyntaxError: Unexpected eval or arguments in strict mode
var arguments = 20; // SyntaxError: Unexpected eval or arguments in strict mode
1
2
3
4
2
3
4
# 7、this 值为 undefined
在严格模式下,未绑定到任何对象的函数中的 this 值将为 undefined,而不是默认情况下指向全局对象。
"use strict";
function foo() {
console.log(this);
}
foo(); // undefined
1
2
3
4
5
6
2
3
4
5
6
上次更新: 2025/09/05, 8:09:00