ES6之let和count
关于定义(声明)变量
作用域:1.全局 2.函数作用域(局部)
ES6)新增加了两个重要的 JavaScript 关键字: let 和 const。
let 声明的变量只在 let 命令所在的代码块内有效。
const 声明一个只读的常量,一旦声明,常量的值就不能改变。
1.let
(1).没有预解析,不存在变量的提升。
在代码块内,只要let定义变量,在之前使用,都是报错,只能先定义完在使用。
<script>
let a = 12;
console.log(a);//
</script> // 报错 ReferenceError: a is not defined
let是块级作用域
<script>
if(true){
//var a=12;
let a=12;
}
alert(a);//报错 ReferenceError: a is not defined
</script>
(2) 同一个作用域里, 不能重复定义变量(
暂时性死区)
<script>
let a = 12;
function fn(){
alert(a); //TDZ开始 暂时性死区
alert(b)
let a = 5; //TDZ 结束
let b = 12;
}
fn();
</script>
//报错:ReferenceError: Cannot access 'a' before initialization
(3) for循环,for循环里面是父级作用域
<script>
for(let i = 0; i<10; i++){
console.log(i);//正常显示
}
alert(i);//报错:ReferenceError: i is not defined
</script>
(4).变量 i是用 var 声明的,在全局范围内有效,所以全局中只有一个变量 i, 每次循环时,i 指的是全局变量 i ,所以此时的 arr[5] 是 10。
变量i是用 let 声明的,当前的 i 只在本轮循环中有效,每次循环的 i其实都是一个新的变量,
<script>
var arr =[];
for(var i=0; i<10; i++){
arr[i]=function(){
console.log(i);
}
}
arr[5](); //10
var arr =[];
for(let i=0; i<10; i++){
arr[i]=function(){
console.log(i);
}
}
arr[5]();//5
</script>
2.count(特性和let一样)
(1) const定义变量不能修改
(2)const定义完变量,必须有值,不能后赋值,不能修改
建议:以后就用let,不要再使用var.