📅  最后修改于: 2023-12-03 15:31:40.462000             🧑  作者: Mango
在 JavaScript 中,严格模式(strict mode)是一种特殊的模式,可以提供更加严格的语法和错误检查,避免一些常见的编程错误。在使用严格模式时,代码不能使用一些不安全的语法和特性,例如隐式全局变量和禁止删除变量等。
可以通过在 JavaScript 代码文件或函数的开头添加 'use strict';
来开启严格模式。例如:
'use strict';
// 在此处编写严格模式的 JavaScript 代码
如果需要全局开启严格模式,可以将 'use strict';
添加在 JavaScript 文件的开头。
function test(){
'use strict';
// 在此处编写严格模式的 JavaScript 代码
}
'use strict';
// 在此处编写严格模式的 JavaScript 代码
在严格模式下,在使用变量之前必须先声明变量,否则会抛出 ReferenceError
错误。
'use strict';
x = 1; // 抛出 ReferenceError: x is not defined
在严格模式下,不能删除一个已经声明的变量,否则会抛出 SyntaxError
错误。
'use strict';
var x = 1;
delete x; // 抛出 SyntaxError: Delete of an unqualified identifier in strict mode.
在严格模式下,不能使用一些 ECMAScript 保留字(如 enum
、implements
和 private
)作为变量名或函数名,否则会抛出 SyntaxError
错误。
'use strict';
var enum = 1; // 抛出 SyntaxError: Unexpected token enum
在严格模式下,所有函数必须有名字。匿名函数将抛出 TypeError
错误。
'use strict';
var func = function(){ }; // 抛出 TypeError: In strict mode code, functions can only be declared at top level or inside a block.
在严格模式下,函数的参数名不能重复。
'use strict';
function test(a, b, a){ } // 抛出 SyntaxError: Duplicate parameter name not allowed in this context
eval
和 with
在严格模式下,不能使用 eval
和 with
语句。
'use strict';
eval('var x = 1'); // 抛出 SyntaxError: Eval code may not include 'var' or 'let' declarations.
'use strict';
var x = 1;
with(x){ } // 抛出 SyntaxError: Strict mode code may not include a with statement.
this
的值在严格模式下,函数内部的 this
值不再由调用方式决定(如在全局作用域中调用时为全局对象,在对象属性中调用时为该对象),而是保留为 undefined
。
'use strict';
function test(){
console.log(this); // 输出 undefined
}
test();
call
和 apply
调用函数在严格模式下,使用 call()
或 apply()
调用函数时,第一个参数必须是函数调用时的 this
值。否则将抛出 TypeError
错误。
'use strict';
function test(){
console.log(this);
}
test.call(); // 抛出 TypeError: Cannot read property 'documentElement' of undefined
以上是严格模式的主要特性,此外还有一些其他的限制和改动。在编写 JavaScript 代码时,建议开启严格模式以提高代码质量和可维护性。