关于var函数作用域,闭包与let的区别应用
2018-02-27 13:20:36  By: dwtedx

关于var函数作用域,闭包与let的区别应用。这个跟大家分享一下两者之间的区别,话不多说,看代码。

var a = [];
for (var i = 0; i < 10; i  ) {
    a[i] = (function(j){
    return function(){ console.log(j); };
})(i);
}
a[7]();

var b = [];
for (let i = 0; i &lt; 10; i  ) {
    b[i] =  function(){
        console.log(i); 
    };
}
b[7](); 
var pubvar = 1;


这两个结果是一样的,关于闭包的var

function createFunctions(){
    var result = new Array();
    for (var i=0; i < 10; i  ){
        result[i] = function(){
            return i;
        };
    }
    return result;
}
ClosureExample01.htm


这个函数会返回一个函数数组。表面上看,似乎每个函数都应该返自己的索引值,即位置0 的函数,返回0,位置1 的函数返回1,以此类推。但实际上,每个函数都返回10。因为每个函数的作用域链中。

都保存着createFunctions() 函数的活动对象, 所以它们引用的都是同一个变量i 。当createFunctions()函数返回后,变量i 的值是10,此时每个函数都引用着保存变量i 的同一个变量

对象,所以在每个函数内部i 的值都是10。但是,我们可以通过创建另一个匿名函数强制让闭包的行为符合预期。


若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+