为了账号安全,请及时绑定邮箱和手机立即绑定

一道面试题-求解

一道面试题-求解

隔江千里 2018-07-31 22:21:47
读一下程序,判断输出结果,并分析原因var apples = ["apple1", "apple2", "apple3"];for (var i = 0, funs = []; i < 3;i ++){    funs[i] = function(){        console.log(apples[i]);    }}funs[0]();funs[1]();funs[2]();
查看完整描述

3 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

闭包解决,经典问闭包的方式,i是全局变量,在调用时其值为3,所以全部是undefined,目前的基本可以采用let来解决了

查看完整回答
反对 回复 2018-08-04
?
慕神8447489

TA贡献1780条经验 获得超1个赞

闭包是一个自带运行环境的函数,题中的闭包function函数本地作用域中没有i这个变量,只能沿着作用域链往上查找,而上级作用域中的i最终为3。

var apples = ["apple1", "apple2", "apple3"];

for (var i = 0, funs = []; i < 3;i ++){

    funs[i] = (function(x){

        return function(){

        console.log(apples[x]);

        }

    })(i);

}

funs[0]();

funs[1]();

funs[2]();

将代码改成这样的话,就可以分别输出。 
为什么这样就可以了呢?

因为把i每次的值都放到上级作用域链里面了。


查看完整回答
反对 回复 2018-08-04
  • 3 回答
  • 0 关注
  • 945 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信