ES6 let和const和var区别

ES6

1.let

1.let关键字就是用来声明变量的;

2.使用let关键字声明的变量具有块级作用域;

if(true){
    let a = 10;
}
console.log(a); // a is not defined

**注意:**在一个大括号中使用let关键字声明的变量才具有块级作用域,var关键字是不具备这个特点的;

3.使用let关键字声明的变量没有变量的提升;

console.log(a); // a is not defined
let a = 10 ;

4.使用let关键字声明的变量具有暂时性死区特性;

var num = 10
if (true) {
	console.log(num); //报错
	let num = 20;
}

5.防止循环变量成全局变量;

面试题:

(1).使用var声明变量

//在for循环里边使用var声明变量是全局变量
var arr = [];
for (var i = 0 ; i < 2 ; i++){
    arr[i] = function(){
        console.log(i);
    }
}
arr[0](); //2
arr[1](); //2
//var声明变量没有块级作用域,调用函数时,for循环已经结束,此时i=2是全局的,当调用函数时i为2,所以输出都是2;

(2).使用let声明变量

//使用let声明的i具有块级作用域,
var arr = [];
for (let i = 0 ; i < 2 ; i++){
    arr[i] = function(){
        console.log(i);
    }
}
arr[0](); //0
arr[1](); //1
//分步骤
//大括号是一个块级作用域
//for循环第一圈
{
    i = 0;
    //函数还没调用
    arr[0] = function(){
        console.log(i)
    }
    //调用函数
    arr[0](); //0
}
//for循环第二圈
{
    i = 1;
    //函数还没调用
    arr[1] = function(){
        console.log(i); //没有调用,不能输出
    }
    //调用函数
    arr[1](); //1
}

2.const

声明常量,常量就是值(内存地址)不会变化的量;

1.具有块级作用域

if(true){
    const a = 10;
}
console.log(a); //a is not defined

2.声明常量时必须赋值

const a;//Missing initializer in const declaration

3.常量赋值后,值不能修改

const a = 10;
a = 20; // Assignment to constant variable.

//复杂数据里边值可以改变,地址不能更改
const arr = [10,20];
arr[0] = 50;
arr[1] = 60;
console.log(arr); //[50,60]
//直接给arr赋值,不可以
arr = [50.60]; // Assignment to constant variable.

注意:

const 声明的变量是一个常量,并且必须给定值,常量不能重新进行赋值,如果是基本数据类型,不能更改值,如果是复杂类型,不能更改地址;

3.let, const, var 区别

1.使用var声明的变量,其作用域为该语句所在函数内,并且存在变量提升;

2.使用let声明的变量,其作用域为该语句所在的代码块,不存在变量提升;

3.使用const声明的是常量,在后面出现的代码中不能再修改该常量的值;

ES6 let和const和var区别_第1张图片

你可能感兴趣的:(JavaScript,ES6)