在js中,定义变量时要使用var操作符,但是var有许多的缺点,如:一个变量可以重复声明、没有块级作用域、不能限制修改等。
//缺点1:变量可以重复声明 var a=1; var a=2; console.log(a); //2 //缺点2:无法限制修改 //缺点3:没有块级作用域 { var b=12; } console.log(b); //12
ES6新增的let和const就解决了这些问题。下面我们来看看let和const吧。
- let和const都不能重复声明
let a=1; let a=2; console.log(b); //SyntaxError: Identifier 'a' has already been declared
- let声明的是变量,值可以修改;const声明的是常量,不能修改
const a=1; a=2; console.log(a); //TypeError: Assignment to constant variable.
- 有块级作用域
var a=[]; for(var i=0; i<5;i++){ a[i] = function (){ console.log(i); } } a[2](); //5
上面这个例子中,变量i是var定义的,作用域是在全局,全局只有一个i,每一次循环,变量i的值都会+1,循环结束后,i的值为5。所有数组a的成员,a[0]...a[4]里面的i都是同一个,所以最后输出的是5。
let a=[]; for(let i=0; i<5;i++){ a[i] = function (){ console.log(i); } } a[2](); //2
另外,值得注意的是,for循环设置循环变量的那部分是父作用域,循环体内是单独的子作用域。
for(let i=0; i<2; i++){ let i=12; console.log(i); } //12 //12
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。