let 和 const
一.let
`let`在ES6中来声明变量
它与之前的`var`的区别
- let只作用在块级作用域
{
let a = 10;
var b = 20;
}
console.log(a); //a is not defined
console.log(b); //20
- let没有变量提升let它所声明的变量一定在声明后使用,否则报错
//var命令会发生变量提升现象,即变量可以在声明之前使用,值为undefined。
//这种现象多多少少是有些奇怪的,变量应该在声明语句之后才可以使用。
//var的情况
console.log(c);//输出undefined
var c = 30;
//let的情况
console.log(c);// 报错ReferenceError
let c = 30;
- let不能重复声明.
let c = 10;
let c = 30;
console.log(c); //报错
function func(arg) {
let arg; // 报错
}
- 暂时性死区
- 在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法 上,称为暂时性死区(temporal dead zone,简称 TDZ)
- let的好处:
- 解决循环计数问题
`
//解决方式一:使用闭包
var arr = []
for(var i = 0; i < 10; i++){
arr[i] = (function(n){
return function(){
return n;
}
})(i)
}
//解决方式二:使用let声明i
var arr = []
for(let i = 0; i < 10; i++){
arr[i] = function () {
return i;
}
}
`
- 不会污染全局变量
let a = 10
console.log(a);//10
console.log(window.a);//并不是10