如何使用“严格使用”;不修改我的实用程序对象的作用域

How to use "use strict" without modifying the scope of my utilities objects?

本文关键字:我的 修改 实用程序 对象 作用域 何使用 严格使用      更新时间:2023-09-26

我正在使用几个全局实用程序对象,如:

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在其作用域之外不再可用。

当你在IIFE中定义对象时,它将是该IIFE的本地对象。

有两个选项

1)就像下面说的,

"use strict";
var StringUtils = {
   equalsIgnoreCase: function(string1, string2) {
       return string1.toUpperCase() === string2.toUpperCase();
   }
};

2)定义如下,如果你想使用IIFE

window.StringUtils = {};

如果您使用的是nodejs,这将是

global.StringUtils = {};

由于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
}());