通过javascript中的参数将全局变量传递给函数有什么用?

时间:2014-01-10 19:06:25

标签: javascript

我看到一些自动执行函数,其中全局变量作为参数传递,即使全局变量可以在函数内部访问。

var MyApp = {};
(function(app) {
    //Do something with app varaible.
})(MyApp);

有没有理由通过参数将它们传递给函数?

2 个答案:

答案 0 :(得分:2)

函数参数以及在函数范围内使用var声明的变量在本地作用域,并为外部作用域中的同一变量的任何值设置阴影。

在您的示例中,这允许$具有函数之外的值,并且仅在函数内部临时切换到jQuery对象。

$ = "stuff";
console.log($); // "stuff"

(function($) {
    console.log($); // the jQuery object
})(jQuery);

console.log($); // "stuff"

答案 1 :(得分:2)

考虑使用jQuery的初始代码:

只是为了帮助编写代码,一些程序员沉迷于$,所以他们将jQuery作为参数传递并称之为$。这个代码是一个更好的方式来做这个$ = jQuery,在代码中,其他框架已经用户$,$ = jQuery会覆盖其他API代码......当你使用jQuery和其他冲突的库时,你通常会看到那种代码构造这迫使你调用jQuery.noConflict()。

jQuery.noConflict()删除你之前能够执行此操作的$ functions($ div')...所以要像以前一样继续使用$,在代码中你知道$应该是jQuery然后你声明代码如:

(function($){
   ...
})(jQuery);

关于一般的关闭:

这在其他情况下很有用,想象一下使用jquery $变量工作的巨大函数,然后你向你的项目中添加一个与$冲突的库,上面的闭包将帮助你不重写代码,你可以将其包装在用户内部的封闭内。

还有一件事,为了清晰,(function(){})()被称为闭包,因为你声明了一个匿名函数然后你执行它,这意味着你在该函数内创建一个私有上下文。

关于闭包的

链接:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures

将globals作为参数传递给闭包的原因是,当您将全局变量作为参数传递给locals时,您只将该全局变量重命名为闭包上下文中的另一个名称。这是一种可控制的说法,“嘿,这里jQuery被称为$和jQuery”。