Javascript &引用;使用“严格的”;继承/范围
我只是想知道: 在Javascript &引用;使用“严格的”;继承/范围,javascript,use-strict,Javascript,Use Strict,我只是想知道: 在//1上使用严格的就足够了,还是我们必须在//2和//3这样的所有地方都要明确 引用 要为整个脚本调用严格模式,请使用确切的语句“use strict”(或'use strict';)在任何其他语句之前 连接严格脚本和非严格脚本是有问题的。因此,建议您逐个函数启用严格模式 因此,将其置于顶部适用于整个文件。您不必在每个函数中都明确提到这一点 注意:在顶部使用使用strict有其自身的问题。在链接的MDN页面中阅读有关它们的信息。因此,根据MDN,推荐的方法是 您还可以采取将脚本
//1
上使用严格的就足够了,还是我们必须在//2
和//3
这样的所有地方都要明确
引用
要为整个脚本调用严格模式,请使用确切的语句“use strict”代码>(或'use strict';
)在任何其他语句之前
连接严格脚本和非严格脚本是有问题的。因此,建议您逐个函数启用严格模式
因此,将其置于顶部适用于整个文件。您不必在每个函数中都明确提到这一点
注意:在顶部使用使用strict
有其自身的问题。在链接的MDN页面中阅读有关它们的信息。因此,根据MDN,推荐的方法是
您还可以采取将脚本的全部内容包装到函数中并使外部函数使用严格模式的方法。这消除了串联问题,但这意味着您必须显式地将任何全局变量导出到函数范围之外
你可以这样测试
//Global Scope
"use strict"; //1
function A() {
"use strict"; //2
function innerA() {
"use strict"; //3
}
}
'use strict';
(function () {
return {
1: 1,
1: 2
};
})();
现在,它将抛出一个错误
SyntaxError:严格模式下不允许对象文字中存在重复的数据属性
但是,当你这样做的时候
//Global Scope
"use strict"; //1
function A() {
"use strict"; //2
function innerA() {
"use strict"; //3
}
}
'use strict';
(function () {
return {
1: 1,
1: 2
};
})();
它只会在第二个功能中失败,而不会在第一个功能中失败。因为,只有第二个函数处于严格模式
同样,如果你在一个函数中有一个函数,如你在问题中所示
(function () {
return {
1: 1,
1: 2
};
})();
(function () {
'use strict';
return {
1: 1,
1: 2
};
})();
由于封闭函数中的使用strict
,内部函数也将处于严格模式。因此,内部函数将引发一个SyntaxError
但是,如果在{}
内的块中使用使用strict
,则它不会产生任何效果,例如
(function () {
'use strict';
(function () {
return {
1: 1,
1: 2
};
})();
})();
或
不会抛出任何错误
因此,use strict
应该位于函数的开头或文件的开头。只有这样,代码才会处于严格模式。在/1
定义它就足够了。这是直接来自JavaScript:权威指南(由我强调):
如果脚本有“use strict”指令,则脚本的顶级(非函数)代码是严格代码。如果函数体是在严格代码中定义的,或者如果它有“use strict”指令,那么它就是严格代码
但一个就够了;)