我正在测试两对场景:
1。)将全局变量作为参数传递......
(function(d){
//do some stuff with d
return //something
})(document);
...或将全局分配给局部变量。
(function(){
var d = document;
//do the same stuff
return //something
})();
从浏览器到浏览器,从版本到版本,甚至从测试到测试,结果都不同!
2。)我有一个通过XMLHttpRequest获得的大型数据对象。假设这个对象可以通过几种方法访问,但只有一种方法与父函数的范围相关。
(function(){
//get data object
var data = response;
//change GUI, assign events, do some other stuff
var searchInData = function(id){ //this will be used often
//code
};
//data object won't be accessed any more
//a lot of code
return //something
})();
......还是要用这个?
(function(){
var search = (function(){
var data = response;
//change GUI, assign events, do some other stuff
return function(id){
//code
}
})();
//other stuff
return //something
})();
同样,我无法得到明确的结果:使用哪种,为什么以及何时使用?
答案 0 :(得分:2)
1从浏览器到浏览器,从版本到版本,甚至从测试到测试,结果都不同!
然后使用你发现的更好阅读。例如,选项#1的编写量较少,但是对于长函数而言,没有难以理解的描述性参数(您需要向下滚动以了解变量包含的内容)。
2使用关闭?
我认为//a lot of code
是相关的。这两个函数都可以访问该代码范围内的变量,如果不使用闭包,那么很多代码都有局部变量(选项#2)。如果您使用闭包,浏览器可能能够优化垃圾收集并进行更好的内存管理。但是,这将取决于//other stuff
实际上是什么 - 对于我建议关闭的异步代码。