let命令
关于let:
1.没有预编译,不存在变量提升,没有定义使用,会报错
2.同一个作用域里,不能重复定义变量
3.for()里面时父级作用域,{}里面时子级作用域
{
let a="我的"; //用let声明的变量具备块级作用域
var b=10; //var声明,全局作用域
}
console.log(b); //10
console.log(a); //error
{
//let声明,同意作用域不能有同名变量
var age=18;
var age=20;//OK
let ages=20;
// let ages=21 //error
}
var age=20;
function run() {
age=age+20; //TDZ 暂时性死区
console.log(age); //报错
let age=10;
}
run();
//块级作用域
for (let i=0;i<3;i++){ //父级作用域
let i=8;//子级作用域
console.log(i);//8
}
var arr=[];for(var i=0;i<10;i++){
arr[i]=function () {
console.log(i); }
}
(arr[1])(); // 10
var arr1=[];for(let i=0;i<10;i++){
arr1[i]=function () {
console.log(i); }
}
(arr1[1])(); //1
const定义常量
1.const声明的常量的值一旦声明不可更改;
2.必须在声明时同时赋值,不能后赋值
const arr=["a","b"];
arr.push("orange");
console.log(arr);
//Object.freeze(对象)
const arr1=Object.freeze(["a","b"]);
arr1.push("c");
console.log(arr1); //报错