在JavaScript中使用闭包有什么好处?如果我通常可以编写更简单明了的解决方案,至少在我看来,为什么我应该在代码中考虑它们呢?
例如,考虑一下:
function multiplier(factor) {
return function(number) {
return number * factor;
};
}
var twice = multiplier(2);
console.log(twice(5));
//////////////////////////////////////////////////// ////////////////
function myMultiplier(factor, number) {
return number * factor;
}
console.log(myMultiplier(2, 5));
它们都输出10,但是我发现myMultipler更易于理解,编写更快,并且我只需要一个函数即可。为什么我应该在我的版本中考虑闭包版本?
提前致谢。
您可能需要关闭的典型场景之一for
是注册事件处理程序的循环。一个for
循环不会创建一个新的范围。这意味着,如果在循环内注册的事件处理程序在循环过程中依赖于局部变量的值,则需要使用闭包将值包装到处理程序中。
考虑以下两个片段。一个没有关闭的将导致意外的结果。
for(var i = 0; i < locations.length; i++){
var marker = new google.maps.Marker(...);
...
google.maps.event.addListener(marker, 'click', function(){
...
// At the time of click the for loop has finished.
// Thus, marker will be the last marker that was created in the loop.
});
}
for(var i = 0; i < locations.length; i++){
var marker = new google.maps.Marker(...);
...
google.maps.event.addListener(marker, 'click', (function(marker){
return function() {
...
// The marker object is wrapped in the closure and
// will possess the correct value
}
})(marker)); // Pass in marker to make the closure work
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句