Web前端之路让前端飞

ES6的几个点

2017-10-21  本文已影响14人  Viaphlyn

一、let

1.用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
2.变量一定要在声明后使用
3.暂时性死区,不受外部的影响。

var tmp = 123;
if (true) { 
tmp = 'abc'; // ReferenceError 
let tmp;
}

4.let不允许在相同作用域内,重复声明同一个变量。
5.for循环的计数器,很适用let命令

for (let i = 0; i < 3; i++) {
  let i = 'abc';
  console.log(i);
}
// abc
// abc
// abc
//输出了3次abc。表明函数内部的变量i与循环变量i不在同一个作用域,有各自单独的作用域。
设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。

6.块级作用域的出现,使立即执行函数表达式(IIFE)不再必要了。

// IIFE 写法
(function () {
  var tmp = ...;
  ...
}());

// 块级作用域写法
{
  let tmp = ...;
  ...
}

二、const

1.const声明一个只读的常量。一旦声明,常量的值就不能改变,且就必须立即初始化,不能留到以后赋值。
2.只在声明所在的块级作用域内有效。
3.const命令声明的常量也不提升,存在暂时性死区,只能在声明的位置后面使用。

三、class

1.JavaScript 语言中,生成实例对象的传统方法是通过构造函数
而ES6中通过class关键字,可以定义类。
2.类的数据类型就是函数,类本身就指向构造函数。
3.类的内部所有定义的方法,都是不可枚举的(non-enumerable)
4.类和模块的内部,默认就是严格模式,所以不需要使用use strict指定运行模式。只要你的代码写在类或模块之中,就只有严格模式可用。
4.constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。若无定义,一个空的constructor方法会被默认添加。constructor方法默认返回实例对象(即this),完全可以指定返回另外一个对象。

class Point {
}

// 等同于
class Point {
  constructor() {}
}

5.类必须使用new调用,否则会报错。这是它跟普通构造函数的一个主要区别,后者不用new也可以执行。
6.类不存在变量提升
7.Class 可以通过extends关键字实现继承

class Point {
}

class ColorPoint extends Point {
}
上一篇 下一篇

猜你喜欢

热点阅读