最近被问及let和var的区别,特地仔细研究一下
一、
使用var 两次输出都是obama,这是因为ES5只有
全局作用域和函数作用域,没有块级作用域
,这带来很多不合理的场景。第一种场景就是你现在看到的
内层变量覆盖外层变量
。
let
则实际上为JavaScript新增了
块级作用域
。用它所声明的变量,
只在
let
命令所在的代码块内有效
。
二、
变量i是var声明的,
在全局范围内都有效
。所以每一次循环,
新的i值都会覆盖旧值
,导致最后输出的是最后一轮的i的值。而使用let则不会出现这个问题。
三、
const
也用来声明变量,但是
声明的是常量
。一旦声明,常量的值就不能改变
。