📅  最后修改于: 2023-12-03 14:42:28.716000             🧑  作者: Mango
严格模式(Strict mode)是 ECMAScript 5 引入的一种限制JavaScript语言的变化,并提供更多错误检查机制的语法规范。它是 JavaScript 的一个子集, 主要为了让 JavaScript 更加安全,更加严谨。
使用严格模式,需要在代码开头添加 'use strict'
或 "use strict"
声明,即可开启严格模式。
'use strict';
function myFunction() {
// 严格模式下,不允许使用未声明的变量
x = 3; // ReferenceError: x is not defined
}
在严格模式下,JavaScript 会进行以下的限制:
'use strict';
function myFunction() {
// 严格模式下,不允许使用未声明的变量
x = 3; // ReferenceError: x is not defined
}
with
语句。'use strict';
with (Math) { // SyntaxError: Strict mode code may not include a with statement
console.log(cos(90));
}
'use strict';
let x = 1;
delete x; // SyntaxError: Delete of unqualified identifier in strict mode.
function myFunction(a) {
delete a; // SyntaxError: Delete of an unqualified identifier in strict mode.
}
'use strict';
// 严格模式下,对象字面量中属性名不能重复
var obj = {
a: 1,
b: 2,
a: 3 // SyntaxError: Duplicate data property in object literal not allowed in strict mode
};
// 严格模式下,函数参数名不能重复
function myFunction(a, b, a) { // SyntaxError: Duplicate parameter name not allowed in this context
console.log(a + b + a);
}
arguments.callee
或 arguments.caller
。'use strict';
// 严格模式下,不能使用arguments.callee 或 arguments.caller
(function() {
// 在严格模式下,将会抛出 TypeError
arguments.callee();
})();
eval
顶层作用域被限制到当前作用域,并且不会从当前作用域引入变量。'use strict';
// 严格模式下,eval 的作用域被限制到当前作用域,并不能引入上层作用域中的变量。
var x = 10;
eval('var x = 20');
console.log(x); // 10
'use strict';
function myFunction(let) { // SyntaxError: Unexpected strict mode reserved word
console.log(let);
}
严格模式虽然是一种好的语法规范,但是并非必须使用的。在现代浏览器中,默认都是开启严格模式。但是,如果你需要兼容低版本的浏览器,或者你正在使用一些遗留代码,那么就需要注意以下问题:
严格模式是 ECMAScript 5 增加的一种规范,主要为了增强代码的安全和严谨性。严格模式对 JavaScript 进行了限制和改进,可以帮助程序员更好的编写 JavaScript 代码。