"use strict";
// el código aquí se ejecuta en el modo estricto
要在函数中启用严格模式,您需要将指令放在函数的开头。
// el código aquí se ejecuta en el modo irrestricto
function f() {
"use strict";
// el código aquí se ejecuta en el modo estricto
}
// el código aquí se ejecuta en el modo irrestricto
(function() {
"use strict";
var x = {
a: 1,
a: 2
}; // SyntaxError: Duplicate data property in object literal
})(); // not allowed in strict mode
var x = {
a: 1,
a: 2
}; // x es igual a {a: 2}
function f(a, a) {
"use strict";
} // SyntaxError: Strict mode function may not have duplicate parameter names
function f(a, a) {
return a;
}
f(1,2); // regresa 2
(function f() {
"use strict";
arguments.caller; // TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
arguments.callee; // TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
f.arguments; // TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
})();
"use strict";
(翻译:“use strict”)是一个指令,可以在严格模式下执行代码。如果没有此指令,程序将在不受限制的模式下运行。严格模式是在 ECMAScript 5 中引入的,旧版浏览器(IE9 及以下)不支持它。也就是说,他们忽略它并以不受限制的模式运行所有内容。
它是用来做什么的
"use strict";
?在严格模式下,
它是如何使用的
"use strict";
?要为整个脚本启用严格模式,您需要将
"use strict";
or指令'use strict';
放在开头。要在函数中启用严格模式,您需要将指令放在函数的开头。
严格模式和非限制模式有什么区别?
在严格模式下,
不能将值分配给未定义的变量(规范§11.13.1)。在不受限制的模式下,会创建一个全局变量。
您也不能为只读属性赋值。在严格模式下会抛出错误,而在非限制模式下会被静默忽略。
该指令不能使用
with
(规范§12.10)。不能在对象文字上定义重复的属性(规范§§11.1.5)。
不能在函数中定义重复的参数(规范§§13.1,§15.3.2)。
对对象的
arguments
更改不会更改参数(规范§§10.6)。delete
如果参数不是对象的可修改属性(规范§§11.4.1),则抛出错误。eval
您不能在它们自己的上下文之外实例化变量和函数(规范§10.4.2)。this
不转换为对象,以及是否转换this
为全局对象undefined
null
(规范§§10.4.3)。它们不能用作
eval
或arguments
用作名称(规范§11.4.4、§11.4.5、§11.13、§12.2.1、§12.10、§12.14.1、§13.1)。argument.caller
y不能使用arguments.callee
(规范§13.2)。未来版本的 ECMAScript 有更多保留字(规范§7.6.1.2)。
不能使用八进制的文字(规范B.1.1,B.1.2)。
这个答案是我在俄罗斯网站上对同一问题的回答的翻译。
使用 use-strict,向浏览器解释器添加了如何执行 javascript 代码,这迫使您需要先声明变量才能使用它们,现在它们的使用可能会有所不同,如果您希望它影响全局,你必须在代码的开头使用它,或者如果你想让它影响一个函数,你可以在函数之后使用它
在这个函数中,浏览器执行代码没有任何问题。但是如果我们添加 use-strict。
浏览器会因为之前没有声明变量而抛出错误,为了使用它,为此你必须在使用它之前声明变量。
这和许多标准是使用严格的一部分,例如定义一个属性两次、重复参数等,检查参考并查找示例