(ES6学习总结)let与const命令

let的特点大致总结有以下四点:

1.只在命令的代码块内有效,即作用域只在块级或子块中有效

如:for(let i=0;i<10;i++){

}

console.log("i:",i);//Uncaught ReferenceError: i is not defined

只在for循环块中有效


2.不存在变量提升

与var不同的是let不存在变量提升,如:

console.log(a);//undefined

var a=123

由于var存在变量提升,此处等价于:

var a;

console.log(a);

a=123;


console.log(i);//Uncaught ReferenceError: i is not defined

let i=123;

所以let不存在变量提升


3.暂时性死区,即在代码块区使用let命令声明变量之前,该变量不可用,如:

var a=123;

if(true){

    a=234;

    let a;//Uncaught ReferenceError: i is not defined

}

if(true){

    a=123;//Uncaught ReferenceError: i is not defined

    let a;

    console.log("a:",a);//undefined

    a=234;

    console.log("a:",a);//234

}


4.不允许重复声明

function foo(){

   let a=1;

   let a=2;

}//Uncaught SyntaxError: Identifier 'a' has already been declared

function foo(args){

   let args;

}//Identifier 'args' has already been declared


const一旦声明变量,必须立即初始化:

const a;//Uncaught SyntaxError: Missing initializer in const declaration

const声明后不可更改,对于简单类型来说是变量只想的那个内存地址不得更改,对于复杂类型来说,变量只想的内存地址视为指针,指针是固定的,但是其数据结构却不能控制,如:

const a=123;

a=234;//Uncaught SyntaxError: Missing initializer in const declaration

const a={};

a.b=123;

console.log(a.b);//123;

const b=[];

b.push('a');//成功

b.length=0;//成功

b=['aa']//Uncaught TypeError: Assignment to constant variable.

const与let一样拥有以上四个特性;

PS:最近开始深入学习ES6,虽然在项目中早就已经用到,但是发现还是有很多值得深究和注意的地方,所以决定重新学习认识ES6,主要深入研究阮一峰的《ECMAScript6入门》


猜你喜欢

转载自blog.csdn.net/qq_16933879/article/details/79992779
今日推荐