引用MDN上的严格模式 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode#Strict_mode_for_scripts,
要为整个脚本调用严格模式,请输入确切的语句"use strict";
(or 'use strict';
) 在任何其他陈述之前。
连接严格和非严格脚本是有问题的。因此,建议您逐个功能启用严格模式。
所以把它放在顶部适用于整个文件。您不必在每个函数中明确提及这一点。
Note: Using use strict
高层也有自己的问题。请在链接的 MDN 页面中了解它们。因此,根据 MDN,推荐的方法是
您还可以采取将脚本的全部内容包装在函数中并让外部函数使用严格模式的方法。这消除了串联问题,但这意味着您必须显式地将任何全局变量导出到函数范围之外。
你可以测试一下,就像这样
'use strict';
(function () {
return {
1: 1,
1: 2
};
})();
现在,它会抛出一个错误,
SyntaxError:严格模式下不允许对象文字中存在重复的数据属性
但是,当你做这样的事情时
(function () {
return {
1: 1,
1: 2
};
})();
(function () {
'use strict';
return {
1: 1,
1: 2
};
})();
它只会在第二个函数中失败,而不会在第一个函数中失败。因为,只有第二个函数处于严格模式。
另外,如果您在函数中包含函数,就像您在问题中所示的那样,
(function () {
'use strict';
(function () {
return {
1: 1,
1: 2
};
})();
})();
内部函数也将处于严格模式,因为use strict
在封闭函数中。所以,内部函数会提出一个SyntaxError
.
但是,如果你使用use strict
在一个块内{}
,它不会有任何影响,例如,
(function () {
{
'use strict';
return {
1: 1,
1: 2
};
}
})();
or
console.log("");
'use strict';
var a = {
1: 1,
1: 2
};
不会抛出任何错误。
So, use strict
应该位于函数的开头或文件的开头。只有这样代码才会处于严格模式。