## 1.let ##
作用:1. 将变量作用域设置为当前{},外部无法访问
2.在同一个作用域下不允许重复定义相同变量
## 例1:let的作用域 ##
{
var a= 10;
let b =20;
}
console.log(a) //10
console.log(b) // b is not defined
let会将{}作为其作用域,在外面不能访问
## 例 2: let不会造成变量泄漏 ##
for(var i =0; i < 10 ;i++){
console.log(i)
}
console.log(i) //10
var 声明的变量i是全局声明的变量,一直没被释放,并与想要的不符
for(let i =0; i < 10 ;i++){
console.log(i)
}
console.log(i) // i is not defined
let 声明的变量只在其作用域有效
## 例 3:let能解决for循环的 变量泄漏问题 ##
var arr = [];
for(var i =0; i < 10 ;i++){
arr[i] = function(){
console.log(i)
}
}
arr[6]() //10
i是var声明的全局变量,一直存在,所以arr里的任意项最后都是打印10
//////////////////////////////////
var arr = [];
for(let i =0; i < 10 ;i++){
arr[i] = function(){
console.log(i)
}
}
arr[6]() //6
i 是let 声明的变量,只在for循环中有效,循环完后销毁
## 例 4 :不会存在变量提升 ##
console.log(a); //undefined
console.log(b); // b is not defined
var a = 10;
let b = 20;
所有不能在let声明前,调用该变量!!!
## 例 5: 封闭作用域(暂时性死区) ##
var temp = 10;
if(true){
console.log(temp); //temp is not defined
let temp = 20;
}
——>只要在当前作用域内用let声明的变量,就不是自由变量
——>*typeof 测试不一定正确*
console.log(typeof b) //undefine
——>
let b = 20
console.log(typeof b) //number
——>
console.log(typeof b) //b is not defined
let b = 20
## 例 6 不允许重复声明 ##
let a = 10;
var a = 5 ; //报错
let a = 10;
let a = 5 ; //报错
## 2.coust 声明常量 ##
常量一般大写,规范
※ const NUM = 1; //const声明的常量不允许修改
※ const 声明的常量必须立即赋值;
※ 与let一样 只能在当前块级作用域有效
if(true){
const max = 3
}
console.log(max) //max is not defined
※ 对于引用类型,只能保证常量指向的地址不变,不能保证地址里的值 不变