javascript-包含外部jQuery脚本

我有一个外部JavaScript文件,该文件将在带有许多其他脚本的页面上使用.我的脚本涉及许多侦听事件的jQuery,根据设计,我声明了许多全局变量.我一直在阅读最佳实践文章,关于“污染全局名称空间”和无意中的脚本交互的说法很多.

封装(封装)JavaScript文件的最佳方法是什么,以便:

>我仍然可以访问其中的一些
机箱外部的变量
> jQuery事件监听器将
功能正常

我没有公开代码的*,因此,即使是一般的答复也值得赞赏.此外,欢迎您提供其他有关使脚本不易受到页面上其他脚本攻击的技巧.

我已经找到了常规JavaScript的外壳样式,但是jQuery的使用使这复杂吗?

解决方法:

通常,这归结为将您的对象封装到“命名空间”中.我在这里使用引号是因为该术语不是JavaScript中的正式语义,而是通过基本对象封装实现的.

有几种方法可以做到这一点,最终归结为个人喜好.

一种方法是只使用基本的JS对象,并将所有内容保留在其中.对象的名称应该是语义的,并赋予对象某种含义,但是否则,其目的是仅包装您自己的代码并将其保留在全局名称空间之外.

var SomeName = {
    alpha: 1,
    beta: {a: 1, b: 2},
    gamma: function(){ 
        SomeName.alpha += 1;
    }
}

在这种情况下,只有SomeName在全局名称空间中.这种方法的缺点是名称空间中的所有内容都是公共的,您必须使用完整的名称空间来引用对象,而不是使用“ this”-例如在SomeName.gamma中,我们必须使用SomeName.alpha来引用alpha的内容.

另一种方法是使名称空间成为具有属性的函数.这种方法的一个不错的功能是您可以通过闭包创建“私有”变量.它还使您无需完全引用名称空间即可访问闭包的函数和变量.

var SomeName = (function(){
   var self = this;
   var privateVar = 1;
   var privateFunc = function() { };   

   this.publicVar = 2;
   this.publicFunc = function(){
       console.log(privateVar);
       console.log(this.publicVar); // if called via SomeName.publicFunc

       setTimeout(function(){ 
           console.log(self.publicVar);
           console.log(privateVar);
       }, 1000);
   };
}();

这种方法的另一个好处是,它使您可以保护要使用的全局变量.例如,如果您使用jQuery,并且使用另一个创建$变量的库,则始终可以通过以下方法确保使用$时引用的是jQuery:

var SomeName = (function($){
    console.log($('div'));
})(jQuery);
上一篇:ActiveMQ producer不断发送消息,会导致broker内存耗尽吗?


下一篇:理论+实操:shell之case语句for/while/until循环语句、函数、数组-满满的干货