为什么要在代码中考虑使用JavaScript闭包?

DEdesigns57

在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么要在代码中考虑使用JavaScript闭包?

来自分类Dev

为什么要在javascript闭包中打印此值?

来自分类Dev

在此代码中,为什么要使用闭包?

来自分类Dev

闭包-为什么这行代码是这样的?

来自分类Dev

闭包-为什么这行代码是这样的?

来自分类Dev

为什么此代码的行为类似于闭包?

来自分类Dev

为什么“ for .. in”允许闭包?

来自分类Dev

为什么“ for .. in”允许闭包?

来自分类Dev

JavaScript-为什么此闭包不保存参数?

来自分类Dev

为什么这个javascript闭包无法正常运行?

来自分类Dev

JavaScript-为什么此闭包不保存参数?

来自分类Dev

为什么此闭包也需要在外部函数上返回?

来自分类Dev

为什么此代码会根据在哪个范围内创建闭包而工作/失败?

来自分类Dev

为什么我要在公共方法中使用代码合同?

来自分类Dev

为什么Elixir允许使用未定义变量的闭包?

来自分类Dev

为什么boost示例再次调用`shared_from_this()`而不是使用闭包变量

来自分类Dev

对于闭包,为什么要使用两个括号?

来自分类Dev

为什么在转让所有权后可以使用非捕获闭包?

来自分类Dev

为什么闭包编译器使用goog.exportSymbol重命名属性?

来自分类Dev

为什么我不能访问原型函数(使用闭包)?

来自分类Dev

为什么我必须在 ES6 的地图闭包中使用 return ?

来自分类Dev

为什么使用闭包将函数绑定到对象是错误的?

来自分类Dev

为什么要在Google Maps Javascript中使用defer?

来自分类Dev

为什么要在JavaScript中使用函数作用域?

来自分类Dev

javascript闭包无法使用数组属性?

来自分类Dev

使用闭包和函数的javascript模块

来自分类Dev

我正在尝试使用javascript闭包

来自分类Dev

为什么此defun闭包与defparameter闭包的行为不同?

来自分类Dev

使用闭包时,以下JavaScript语法的原因是什么?

Related 相关文章

  1. 1

    为什么要在代码中考虑使用JavaScript闭包?

  2. 2

    为什么要在javascript闭包中打印此值?

  3. 3

    在此代码中,为什么要使用闭包?

  4. 4

    闭包-为什么这行代码是这样的?

  5. 5

    闭包-为什么这行代码是这样的?

  6. 6

    为什么此代码的行为类似于闭包?

  7. 7

    为什么“ for .. in”允许闭包?

  8. 8

    为什么“ for .. in”允许闭包?

  9. 9

    JavaScript-为什么此闭包不保存参数?

  10. 10

    为什么这个javascript闭包无法正常运行?

  11. 11

    JavaScript-为什么此闭包不保存参数?

  12. 12

    为什么此闭包也需要在外部函数上返回?

  13. 13

    为什么此代码会根据在哪个范围内创建闭包而工作/失败?

  14. 14

    为什么我要在公共方法中使用代码合同?

  15. 15

    为什么Elixir允许使用未定义变量的闭包?

  16. 16

    为什么boost示例再次调用`shared_from_this()`而不是使用闭包变量

  17. 17

    对于闭包,为什么要使用两个括号?

  18. 18

    为什么在转让所有权后可以使用非捕获闭包?

  19. 19

    为什么闭包编译器使用goog.exportSymbol重命名属性?

  20. 20

    为什么我不能访问原型函数(使用闭包)?

  21. 21

    为什么我必须在 ES6 的地图闭包中使用 return ?

  22. 22

    为什么使用闭包将函数绑定到对象是错误的?

  23. 23

    为什么要在Google Maps Javascript中使用defer?

  24. 24

    为什么要在JavaScript中使用函数作用域?

  25. 25

    javascript闭包无法使用数组属性?

  26. 26

    使用闭包和函数的javascript模块

  27. 27

    我正在尝试使用javascript闭包

  28. 28

    为什么此defun闭包与defparameter闭包的行为不同?

  29. 29

    使用闭包时,以下JavaScript语法的原因是什么?

热门标签

归档