《ES6标准入门》学习心得1:let和var

let和var的区别

let是ES6新增的一个命令,用于声明变量,用法类似于var,但是还是有所不同,直接上代码:

var
var a = [] ;
for (var i = 0;i<10;i++){
    a[i] = function(){
    console.log(i);
    };  
}
a[6]();

输出结果为:10。这说明var声明的是全局变量,在代码块之外也是有效的,也就是说:被var声明的变量,全局都是有效的,所以上面代码不管你输入ai,i的值是多少,结果都会输出最后一轮输出的i值,也就是10。


let
var a = [] ;
for (let i = 0;i<10;i++){
    a[i] = function(){
    console.log(i);
    };  
}
a[6]();

输出结果为:6。这是因为let的作用域只是在代码块内才有效,出了代码块后就无效了,也就是说在for(let i = 0;i<10;i++)内部有效,所以每一次循环的i其实都是一个新的变量,,于是最后输出结果为6。那么你可能会问,为什么不是0,按照你说的每一轮循环都是一个新的变量,那么新变量的初始值应该是0吧,它输出结果6,那么是怎么知道上一轮循环的结果从而计算出本轮的结果的呢?这是因为JavaScript引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就按照上一轮循环的基础上进行计算

另外还有一点也可以证明let的作用域仅是在它的作用域内,这是一个for循环:

for(let i = 0;i < 3; i++){
    let i = 'abc';
    console.log(i);
}
//abc
//abc
//abc

输出结果为3个abc。因为设置循环变量的那一部分,也就是for(..这里..)是一个父作用域,而for循环内部又是一个单独的子作用域。这表明了函数内部的变量i与循环变量i不在同一个作用域,而是有各自单独的作用域。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值