为什么要将全局变量传递给函数



我已经看过相同的代码两种方式,想知道它们之间是否有任何权衡。

方法1:

(function(i) {
    // Do something to i now
}(global_variable))

方法2:

(function() {
    // Do something to global_variable now
}())

如果该范围中存在该函数,为什么将全局变量传递给一个函数?

在这种情况下,它给出了清晰的指令,即此功能使用全局,并且可以易于键入别名。另外,它使访问变量的速度更快一点,因为它不需要搜索所有范围,直到在全局范围中找到它。

在常规功能的情况下,不是示例中的IIFE,它使您的功能更具测试性,因为您可以更轻松地模拟全局。

出于混杂目的:

(function(leeloo){
    //inside here you can use the short term
})(LeeloominaiLekataribaLaminaTchaiEkbatDeSebat)
//this would be similar, it's a matter of preference
(function(){
    var leeloo = LeeloominaiLekataribaLaminaTchaiEkbatDeSebat;
    //...
})()

或封闭一个值,例如此示例:

(function($){
    //in here, $ preserves the passed/injected value, 
    //even if the global value changes
})(jQuery.noConflict())

这样,您甚至可以在同一页面中使用多个版本的jQuery。

出于某种原因,当您不想永久更改global_variable的值时,您可能需要使用第一个示例。例如。执行此代码后,本地副本将被更改,但全局变量将不变。

global_variable=true; (function(i){ i=false; return i; }(global_variable));

但是,此代码显然改变了global_variable

global_variable=true; (function(){ global_variable=false; }());

编辑:有点切向,这种变化看起来像改变了全局变量,但这并不是因为调用该函数会创建全局变量的阴影副本。您可能应该避免这种模式,因为它可能会造成混乱:

g=true; (function(g){ g=false; return g; }(g));

相关内容

  • 没有找到相关文章

最新更新