你的位置:首页 > 软件开发 > Java > 谈谈闭包中的

谈谈闭包中的

发布时间:2016-07-02 21:00:05
前面几篇文章中提到过,作用域链以及闭包的概念,这里就不一一重复了, 作用域链的这种配置机制引出了一个值得注意副作用,既闭包只能取得包含函数中任何变量的最后一个值。别忘了闭包所保存的是整个变量对象,而不是某个特殊的变量。 func ...

谈谈闭包中的

  前面几篇文章中提到过,作用域链以及闭包的概念,这里就不一一重复了,

  作用域链的这种配置机制引出了一个值得注意副作用,既闭包只能取得包含函数中任何变量的最后一个值。别忘了闭包所保存的是整个变量对象,而不是某个特殊的变量。

        function createFunctions(){

            var result = new Array();

            for(var i=0;i<10;i++){

                result[i] = function(){

                    return i;

                }

            }

            

            return result;

        }  

   谈谈闭包中的                     

        从上面的代码,这个函数会返回一个函数数组。表面上看,似乎每个函数都应该返回自己的索引值,既位置0的函数返回0,依次类推。但实例每个函数都会返回10.

        因为每个函数的作用域链中都保存着 createFunctions() 函数的活动对象,所以它们引用的都是同一个变量i.

        那怎么解决这个问题尼? 可以通过创建另一个匿名函数强制让闭包的行为符合预期,如下所示

 

        function createFunctions(){

            var result = new Array();

            for(var i=0;i<10;i++){

                result[i] = function(num){

                   return function(){

                        return num;

                    }

                }(i);

            }

            return result;

        }        

 

        代码修改为上面的时候,似乎符合我们的初衷了,

        谈谈闭包中的   上面须要注意的是:

原标题:谈谈闭包中的

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录