JavaScript之闭包

作者: 唐小福 | 来源:发表于2017-10-18 20:03 被阅读37次

闭包是指有权访问另一个函数作用域中的变量的函数。
创建闭包的常见方式,就是在一个函数内部创建另一个函数。
闭包导致的问题:闭包只能取得包含函数中任何变量的最后一个值。
举例更好的说明:


function createFunction(){  
    var result=new Array();  
    for(var i=0;i<10;i++){    
       result[i]=function(){  
         return i;  
       };  
    }  
return result;  
}//每个函数都返回10  

解决办法一:

 

function createFunction (){  
      var result=ner Array() ;  
      for(var i=0;i<10;i++){  
          result[i]=function(num){  
              return function(){  
                  return num;  
             };  
      }(i);  
   }   
   reutrn result;      
}  

解决方法二:

function createFunctions(){  
    var result=new Array();  
    for (let i=0;i<10;i++){  
       result[i]=function(num){  
          return function(){  
               return num;  
          };  
      }(i);  
   }  
return result;  
}  

方法二用的是es6定义变量的新关键字let。
注意:由于闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存。过度使用闭包可能会导致内存占用过多,所以只有在绝对必要时再考虑使用闭包。

相关文章

  • JavaScript----闭包

    javascript之闭包 闭包的概念     闭包(closure)是 JavaScript 的一种语法特性。 ...

  • 闭包

    原文出处 JavaScript深入之闭包 定义 MDN 对闭包的定义为: 闭包是指那些能够访问自由变量的函数。 那...

  • 学习JavaScript闭包和作用域笔记

    JS JavaScript闭包和作用域 闭包 JavaScript高级程序设计中对闭包的定义:闭包是指有权访问另外...

  • JavaScript之闭包

    闭包 闭包:可以用一个函数 去访问 另外一个函数的内部变量的方式 闭包传参

  • JavaScript之闭包

    闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数。闭包导致的问...

  • JavaScript之闭包

    从一个函数的实现说起 话说,我要写这么一个函数 getCallCounter , 该函数无参数,返回一个数字,第一...

  • JavaScript之闭包

    闭包 MDN面试官问我什么是闭包该如何回答廖雪峰博客-闭包阮一峰博客-闭包 个人理解 内部函数可以访问外部函数的作...

  • JavaScript之闭包

    1、返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。2、如果一定要引用循环变量,...

  • javascript之闭包

    什么是闭包(Closure)? 是指有权限访问另一个函数作用域中的变量的函数。概念看起来比较简单,有两个函数,子函...

  • JavaScript之闭包

    什么是闭包? 简言之,闭包是函数引用其周边状态(词法环境)绑在一起形成的(封装)组合结构。在JavaScript中...

网友评论

    本文标题:JavaScript之闭包

    本文链接:https://www.haomeiwen.com/subject/yqneuxtx.html