我使用了几个全局实用程序对象,例如:
var StringUtils = {
// ...
equalsIgnoreCase: function(string1, string2) {
return string1.toUpperCase() === string2.toUpperCase();
}
// ...
};
在这种情况下如何使用"use strict"
?我尝试了以下方式:
(function() {
"use strict";
var StringUtils = {
// ...
equalsIgnoreCase: function(string1, string2) {
return string1.toUpperCase() === string2.toUpperCase();
}
// ...
};
})();
但是你可以想象,StringUtils
在其范围之外不再可用。
答案 0 :(得分:2)
当你在IIFE中定义对象时,它绝对是IIFE的本地对象。
有两个选项
1)就像吼叫一样,
"use strict";
var StringUtils = {
equalsIgnoreCase: function(string1, string2) {
return string1.toUpperCase() === string2.toUpperCase();
}
};
OR
2)如果您想使用IIFE
window.StringUtils = {};
如果您使用的是nodejs
,则
global.StringUtils = {};
答案 1 :(得分:1)
由于EMCAScript5如何实施,您的选择有限。
您可以浏览除了想要全局的功能块之外的所有功能块并添加“use strict”。这可能很乏味但确保只有您想要的代码块是严格的。虽然这会在使用JS lint时抛出“错误”
您可以将代码划分为不同的文件,并在每个文件中指定哪些是严格的,哪些不是
最后,您可以将所有“全局”函数放在脚本的顶部,然后在它们下面添加“use strict”语句;它下面的任何东西都是严格的。
所有这三种方法都允许您从严格块中访问非严格对象。
就您的代码块而言,它建议将整个js文件包装在一个函数中;这有助于向后兼容,同时在整个文件中强制使用strict:
(function () {
'use strict';
// window.StringUtils = {
// GLOBAL.StringUtils = {
var StringUtils = {
// ...
equalsIgnoreCase: function(string1, string2) {
return string1.toUpperCase() === string2.toUpperCase();
}
// ...
};
// add the rest of your code here
}());