var let 和const

首先看个栗子,

for (let i=1;i<=5;i++) {
    setTimeout(function(){console.log(i)},i*1000);
}

打印1,2,3,4,5

for (var i=1;i<=5;i++) {
    setTimeout(function(){console.log(i)},i*1000);
}

打印5个6


for (var i=1;i<=5;i++) {
    setTimeout(function(){console.log(i)},i*1000);
}

为什么呢?

es6的 let 是区域作用域变量,所以每循环一次就是一个独立的作用域,所以5个setTimeout里的i值是相互独立的。

而es5的 var是根据函数范围来区分作用域,循环的区域不是一个单独的作用域,所以一直都是同一个i,当setTimeout开始执行的时候,for循环已经结束了,所以会打印5个6。

let命令定义变量有如下特点
(1)变量仅在块级作用域内有效,并且在块级作用域内独立,不受外界影响
(2)变量必须先定义后使用,并且在js预编译时不存在变量提升
(3)变量读取仍然按照作用域链往上查找
(4)不可在同一作用域内重复定义变量
(5)在全局使用let定义变量时,该变量不再属于全局属性。
const命令用于定义常量,一旦赋值完成,则不可再变。其他特性跟let变量一样。
let,const定义变量,消除了使用var定义变量时带来的种种意外情况与不合理情况,使得变量的定义变得清晰可控,有了let与const,则不该再使用var定义变量。
另外在let,const的选择上,const的效率更高,因此,当程序中的变量一旦初始化则不会再改变时,此时使用const更加合理。
当变量需要重复赋值时,则选择let。

更多关于let: http://es6.ruanyifeng.com/#docs/let

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值