变量声明

let:let声明的变量只有所处于的块级有效
当业务逻辑比较复杂的时候,可以防止内层变量覆盖外层变量

在一个大括号中使用let关键字声明的变量才具有块级作用域,var不具备
防止循环变量变成全局变量

使用let关键字声明的变量,不存在变量提升

if(true){
    let a=10;
    console.log(a);//a可以被访问,输出为10
    if(true){
        let c=20;
        var b=30;
    }
    console.log(c);//c不能被访问
    console.log(b);//b可以被访问,理论上输出为30,但是由于c报错,所有后面代码并未执行
}
console.log(a);//a不能被访问
for(var i=0;i<2;i++){
    
}
console.log(i);//i可以被访问,打出的i=2.
for(let j=0;j<2;j++){
    
}
console.log(j);//j不能被访问,j未被定义
</script>
<script>
console.log(a);//可以输出a为undefind
var a=10;
console.log(b);//报错,b未被定义
let b=20;
//暂时性的死区
var temp=123;
if(true){
    console.log(temp);//这个temp不会是var 的temp,而是if大括号里面的temp.
    let temp=20;
var arr=[];
for(var i=0;i<2;i++){
    arr[i]=function(){
        console.log(i);
    }
}
arr[0]();//输出结果为2
arr[1]();//输出结果为2

let brr=[];
for(let j=0;j<2;j++){
    brr[j]=function(){
        console.log(j);
    }
}
brr[0]();//输出为0
brr[1]();//输出为1

 

// const: 用来声明常量的,常量就是值(内存地址)
//具有块级作用域
//声明常量时必须赋初值
//值不可改变(地址不可更改,即栈数据不可改)原始值存入栈,引用值存入堆

if(true){
    const a=10;
}
console.log(a);



const b=10;
      b=20;
console.log(b);//Assignment to constant variable 不能分配一个值给常量



const arr=[100,200];
arr[0]=300;
console.log(arr);//输出arr[300,200]
arr=[5,3];
console.log(arr);//Assignment to constant variable 不能分配一个值给常量

 

posted @ 2020-07-27 20:50  颿華正茂  阅读(144)  评论(0)    收藏  举报