var和let类型的比较、使用for...in和for...of的区别

var和let类型的比较

如果使用的是var声明变量,则是全局变量(除在函数体内部,是一种特殊情况);如果是let声明变量,则是局部变量。如果是使用循环的话,比如典型的for循环,推荐使用let定义增加或者较少的那个变量;若使用var声明,则这个值会一直存在。

       for(var m = 1;m< 5;m++){
            console.log(m);
        }

        for(let n= 1;n < 5;n++){
            console.log(n);
        }
        console.log(m);
        console.log(n);

测试结果:
在这里插入图片描述
写这个内容起初是看到一个博主的文章,文章链接
但是这个博主写的内容有一点问题,在这里指正一下,做出正确的解释。

       //使用var类型遍历数组
        var a=[1,2,3]
        for(var i=0;i<3;i++){
            setTimeout(function(){
                console.log(a[i-1]);    // i的值一直等于3
            },0)
        }
        //输出结果是333

        //使用let类型遍历数组
        var b=[1,2,3]
        for(let i=0;i<3;i++){
            setTimeout(function(){
                console.log(b[i]);
            },0)
        }
        //输出结果是123

这里面如果仅仅想打印数组里面的值,推荐使用let,以防止i值没有被垃圾回收机制销毁。此处代码使用var打印的结果一直都是3,是因为使用了setTimeout,这是一个异步函数,会先执行加操作,直至i的值为4;然后开始执行console打印,但此时由于var声明的原因,i的值已经等于4了,打印333之后退出循环。使用let则不存在这一现象,很好地打印出来了数组b的内容。

变量提升

根据《ES6标准入门》书中的描述,var命令会发生“变量提升”现象,即变量在声明之前使用,值为undefined;为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则就报错。

        //var的情况
        console.log(foo);  
        var foo = 2;
        
        //let的情况
        console.log(f0);
        let fo = 2;

在这里插入图片描述

使用for…in和for…of的区别

for…of遍历出的结果是value;for…in遍历出的结果是key

        var numbers = ['一','二','三']

        for(let num of numbers){
            console.log(num);
        }

        for(let num in numbers){
            console.log(num);
        }

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值