传递给javascript闭包的参数做什么?
我如何解释在包装好的Javascript闭包的开头和结尾传递的参数的作用,如下所示传递给javascript闭包的参数做什么?,javascript,Javascript,我如何解释在包装好的Javascript闭包的开头和结尾传递的参数的作用,如下所示 (function($, window) { return $(function() { return alert("js!"); }); })($, window); 第一个外观是函数参数,第二个外观是在执行函数时传递这些参数的值 请记住,函数的参数不需要与传递的名称匹配(事实上,这可能会在以后引起混淆): 将以同样的方式工作。如果更改参数名称并命名函数,可能更容易解释 (function i
(function($, window) {
return $(function() {
return alert("js!");
});
})($, window);
第一个外观是函数参数,第二个外观是在执行函数时传递这些参数的值 请记住,函数的参数不需要与传递的名称匹配(事实上,这可能会在以后引起混淆):
将以同样的方式工作。如果更改参数名称并命名函数,可能更容易解释
(function init($, win) {
return $(function() {
return alert("js!");
});
})(jQuery, window);
init函数被立即传递参数jQuery
和window
,它们作为参数提供给init函数$
和win
如果将其分解为等效代码,也可能更容易理解
function init($, win) {
return $(function() {
return alert("js!");
});
}
init(jQuery, window);
顶部的参数集是接收参数的位置,底部的参数集是传递参数的位置 他们正在确保其全局变量的闭合副本不会在闭包之外重新分配。这是一种保护您的代码不受其他(可能编写得很糟糕)代码影响的方法。考虑这个例子:
var $ = 'foo';
var blah = (function($) {
return function () {
alert($);
};
})($);
var shizzam = (function() {
return function () {
alert($);
};
})();
// someone evil overwrites my $ var
$ = 'bar';
// blah still works
blah();
// but shizzam is now borked
shizzam();
当一个函数返回另一个函数时,可以将其封闭在parentesis上,以便立即执行。 最后一个括号是传递给它的参数 您可以进行一些测试,以了解:
var a (function(){});
typeof a;
a.toSource()
typeof (function(){});
(function(){}).toSource()
通过这种方式,您传递的参数在将来的覆盖范围内是安全的。例如:
var a = 1
(function(a){
setTimeout(function(){
console.log('This variable is still safe', a);
},2000)
})(a)
a = 0
console.log('has changed', a)
因此,在您的示例中,您可以确保$and window将是您所期望的。开头是接收参数的地方。终点就是他们经过的地方。
var a = 1
(function(a){
setTimeout(function(){
console.log('This variable is still safe', a);
},2000)
})(a)
a = 0
console.log('has changed', a)