ES6基础—let与var/const/对象字面量的增强写法

为了弥补JavaScript中var的缺陷,所以在ES6中有了let

let与var的区别

1.let定义的变量存在块级作用域,一个大括号即是一个块级作用域。

{
  //一个块级作用域
}
 1 {
 2   let test1='baby';   
 3   console.log(test1);   //baby
 4 }
 5   console.log(test1);   //undefined
 6 {
 7   var test1='baby';
 8   console.log(test1);   //baby
 9 }
10 console.log(test1);     //baby

而var只存在函数作用域,即外部不能访问在函数内声明的变量。

值得注意的是,在if和for中声明的变量在其他地方依然可以使用。所以产生了循环多个事件时只会触发最后一个的问题,其中的一个解决方法—闭包就是利用函数作用域将 i 先存了下来。(ES6中可以使用 let 取代 var 来声明i即可解决问题。for(let i ; i  < length ; i ++)

2.let不存在预处理机制,var存在。就是说let必须先定义再使用

js引擎解析代码时存在预处理机制,会将var声明的变量提前,但不会赋值

1 console.log(test2);   //undefined
2 var test2='kids';
3 console.log(test2);   //test
4 console.log(test3); //直接报错,下面不会继续运行 Uncaught ReferenceError: Cannot access 'test3' before initialization 5 let test3='kids'; 6 console.log(test3);

3.被let定义后的变量不能重新被定义,但是var可以

1 var test4='hahaha';
2 var test4='xixixi';
3 console.log(test4);  //xixixi
4 
5 let test5='hahaha';
6 let test5='xixixi;
7 console.log(test5);  //报错——Uncaught SyntaxError: Identifier 'test5' has already been declared

const

在ES6之前并没有可以声明常量的关键字。在定义标识符时必须为他进行赋值,也就是初始化,并且一旦使用const声明赋值就不可以再次赋值。

值得注意的是,如果用const以对象字面量的方式进行定义对象,是指向的对象不能改变,而对象的属性和方法可以进行更改。

1 const obj = {
2     name:'luca',
3     age:3
4 }
5 obj.age=15

这样是被允许的。

ES6的增强写法

 在ES6之前对象字面量是这个样子

var name='luca';
var obj= {
   name:name,
   age:18,
   test:function () {
        //对象方法
   }
}

增强写法

let name = 'luca';
const obj = {
  name,
age:18, test () {
//对象方法 } }

在这里,对象的属性值 name 在外面已声明,就不用写成键值对的方式,直接写 name 即可。对象的方法增强写法如上,有一个特殊情况,

只有是匿名函数的时候,才可以使用简洁语法,如果赋值的是一个有名字的函数,那么就不能使用上述写法。如:

let obj = {
  test:function hello (){
      console.log("Hello")  
  }  
}

 

posted @ 2020-09-07 17:15  可爱到没有脑袋  阅读(238)  评论(0)    收藏  举报