将全局变量传递给函数是否有价值?

时间:2012-02-01 02:04:24

标签: javascript

我最近看到的代码如下:

(function (someGlobal) {
    someGlobal.DoSomething();
})(someGlobal);

其中someGlobal是一个大型框架类。它可能是JQuery。这样做有什么好处?这是一个好习惯吗?看起来这段代码是等效的,不易出错,因为你没有隐藏全局:

(function () {
    someGlobal.DoSomething();
})();

4 个答案:

答案 0 :(得分:2)

  • 如果全局覆盖

  • ,您有可靠的参考
  • 它缩短了访问它的范围链


  

“看起来这段代码是等效的,不易出错,因为你没有隐藏全局:

(function () {
    someGlobal.DoSomething();
})();

如果您预计全局被覆盖,并且您的代码依赖于覆盖的值,那么显然您不希望通过函数中的局部变量对其进行遮蔽。

除此之外,函数中的本地引用不应再容易出错。

答案 1 :(得分:1)

我同意,如果它是一个全局变量那么为什么要通过呢?只需将其用作全局。

然而,似乎这可能是一个有效的过渡机制来删除全局。例如,如果我继承了一个包含大量全局变量的大型代码库,那么一种潜在的过渡机制就是以这种精确的方式慢慢消除全局使用。可以通过这种方式以最小的差异递增地进行更改。

答案 2 :(得分:0)

好处是,在该函数中,someGlobal是明确的。

答案 3 :(得分:0)

这样您就可以在安全范围内使用别名。

(function ($) {
    $.DoSomething();
})(someGlobal);

更新

最重要的是这种方式为您定义了使用someGlobal的安全范围。

如果您使用第二种方式,someGlobal仍然是全局的,只是在回调函数中使用someGlobal的映像,并且您在外面的某处覆盖someGlobal,会发生什么?