for循环遍历时var let的区别

比如在微信小程序中要遍历输出 0-9 的数,我们会使用for循环

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

    console.log(i);

}

输出:

但是,如果我在循环时同时调用wx的api接口10次,那么输出的结果就会不同(这是产生了闭关的效应)

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

    wx.showToast({

        title: 'haha',

        success: function () {

            console.log(i);

        }

    })

}

输出:

可以看到输出了10次10,这是因为i自变量的作用域范围,在这里它相当于全局变量。

可以理解为一个存储单元与与分配的所以下属存储单元都相通(自己的理解)

解决方法:

1、使用临时函数(兼容所有)

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

    (function (j) {

        wx.showToast({

            title: 'haha',

            success: function () {

                console.log(j);

            }

        })

    })(i);

}

等同于

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

    function temp(j) {

        wx.showToast({

            title: 'haha',

            success: function () {

                console.log(j);

            }

        })

    };

    temp(i);

}

输出:

2、使用ES6中let的块作用域(推荐)(低版本IE不兼容)

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

    wx.showToast({

        title: 'haha',

        success: function () {

            console.log(i);

        }

    })

}

输出:

 

但是如果将let i定义在函数外部,则对于循环来说还是相当于全局变量

let i;

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

    wx.showToast({

        title: 'haha',

        success: function () {

            console.log(i);

        }

    })

}

结果还是:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tutouman.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值