JavaScript 严格模式
JavaScript是一种动态语言,即从变量到代码本身,每个JavaScript组件都是动态的。通过JavaScript,您可以在运行时创建变量,更改其数据类型,创建新函数或替换现有逻辑。换句话说,在使用JavaScript时,开发者几乎完全控制。为什么是几乎?有一句著名的说法:
“伴随着巨大的力量而来的是巨大的责任。” —— Ben Parker
JavaScript非常珍视这个原则,虽然在一个精通的编码师的项目中,JavaScript表现得像是最好的编程语言之一,但在新手的手中,它可能完全随机地工作。这种随机行为作为学习JavaScript内外的欲望的一个重要部分,可能会产生一定的复杂性,特别是在项目中使用时。JavaScript的开发人员在ES5中增加了一个名为“严格模式”的新功能,它被认为可以禁止语言的某些行为,以减少随机行为并提高糟糕代码的可检测性。这组限制使得代码更加安全,并保持了高标准的编码。 JavaScript代码在执行之前由引擎进行优化,使用严格模式,可以编写高度优化的程序。这不仅是开发者的建议,也是工业编码标准的强制性要求。
语法: 要在脚本中使用严格模式,只需要使用下面的一行代码,严格模式也被称为严格模式约定,它有自己的作用域,可以影响整个文件或单个方法,取决于相同的。
"use strict";
功能:
我们现在知道,严格模式基本上是JavaScript的一种模式,它更加关注正确的语法和其他逻辑范式,这些范式在以前是允许的而不需要太多探索。但是,现在严格模式不再允许哪些语法和逻辑错误呢?以下是一些重要的错误列表。
自动全局变量声明:
这是JavaScript中的一个最大的问题之一,在没有使用严格模式的情况下,如果你错误地使用一个未定义的变量,JavaScript不会抛出错误,而是在全局范围内声明变量,这经常导致随机性和不期望的输出。启用严格模式后,它将抛出一个常规的引用错误,提醒变量未定义。
来源:
"use strict"; // Turn on strict mode.
a = 1;
输出:
Uncaught ReferenceError: a is not defined
- 注意: 在JavaScript中,对象也是变量,因此它还需要关键字”var”、”let”或”const”来定义一个对象。
- 删除任何JavaScript元素: 这是与常规模式的一个重大改变,因为在严格模式下,不允许删除任何变量或函数。这使得代码更具优化性,因为作用域是静态的,不会随着时间的推移而发生改变。
来源:
"use strict"; // Turn on strict mode.
var a = 1;
delete a;
输出:
Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
- 注意: 你可能会问为什么错误信息中说 unqualified ?JavaScript 提供了一个功能,你可以将对象的属性定义为可删除的,这样就可以在严格模式下删除该属性。
- 使用保留关键字作为变量名: 与大多数其他语言不同,JavaScript 允许在变量名中使用保留关键字,在严格模式下是不允许的。
来源:
"use strict"; // Turn on strict mode.
var eval = 5;
输出:
Uncaught SyntaxError: Unexpected eval or arguments in strict mode.
参数名重复: 与大多数其他编程语言不同,JavaScript允许使用重复的参数名,但在严格模式下是不被允许的。来源:
示例:
<script>
// Normal mode
function myFunc(a, a){
console.log(a);
}
myFunc(0, 10);
</script>
输出结果:
10
示例:
<script>
// Strict mode
"use strict"; // Turn on strict mode.
function myFunc(a, a){
console.log(a);
}
myFunc(0, 10);
</script>
输出结果:
Uncaught SyntaxError: Duplicate parameter name not allowed in this context
极客教程