ES6

  • let命令

let命令存在块级作用域,两个变量分别使用var和let声明两个变量,然后在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值;let暂时性死区,只要块级作用域内存在let命令,所声明的的变量就“绑定binding”这个区域,不再受外部影响

if (true) {
    var a = 10;
    let b = 20;
}
console.log(a); //10
console.log(b); //Uncaught ReferenceError: b is not defined

let不存在变量提升,用let声明变量,极大的消除了代码的潜在bug的隐患

//var的情况
console.log(foo);
var foo = 2;   //undefined
//let的情况
console.log(bar);
let bar = 2;   //ReferenceError: Cannot access 'bar'
  • const命令

声明一个只读的常量,一旦声明,常量的值就不能改变

  • 箭头函数

//定义函数
var f = function(v) {
    return v;
};
//箭头函数
var f = v => v
  • 如果箭头函数不需要参数或者多个参数,就使用一个圆括号代表参数部分
let f = () => 5;
// 等同于
let f = function() { return 5 };
let sum = (num1, num2) => {
    return num1 + num2;
};
// 等同于
let sum = function(num1, num2) {
    return num1 + num2;
};
  • 如果只有一个参数,那么圆括号可以省略
let f = str => {
  console.log(str);
}
f('hello');
  • 如果函数体的代码只有一句,那么大括号可以省略
let f = str => console.log(str);
f('hello');
  • 如果函数体中的代码只有一个return语句,那么return关键词也必须省略
//这是错误的
let sum = (num1, num2) => return num1 + num2;
//这是正确的
let sum = (num1, num2) => num1 + num2;
  • 由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号
let getTempItem = id => ({ id:id, name:'Temp' })
  • 使用箭头函数简化回调函数
let arr = [1,2,3];
// function函数写法
arr = arr.map(function(x) {
    return x * x;
});
// 箭头函数写法
arr = arr.map(x => x * x);

包含constructo构造方法,this关键字代表实例对象,定义“类”的方法时,前面不需要加function关键字,方法之间不需要逗号分隔,会报错
constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须要有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加
constructor与普通构造函数的区别:类的构造函数,不使用new是没法调用的,会报错。而constructor不用new也可以执行

//定义类
class Point {
    constructor(x, y) {
        this.x = x;
        this.y = y;
    }
    toString() {
        return '(' + this.x + ', ' + this.y + ')';
    }
}
//创建对象
let p = new Point(1,2);
console.log(p.toString());
  • 模块化实现

export命令:用于规定模块的对外接口
import命令:用于输入其他模块提供的功能
  1. 接受一对大括号,里面指定要从其他模块导入的变量名。大括号里面的变量名,必须与被导入模块对外接口的名称相同。
  2. 可以使用as关键字,将输入的变量重命名。
  3. 具有提升效果,会提升到整个模块的头部,首先执行。
  4. import是静态执行,所以不能使用表达式和变量,这些只有在运行时才能得到结果的语法结构。
  5. 如果多次重复执行同一句import语句,那么只会执行一次,而不会执行多次。
export default命令

为了给用户提供方便,让他们不用阅读文档就能加载模块,就要用到export default命令,为模块指定默认输出。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ES6简介 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2...
    凌雨微尘阅读 1,124评论 0 3
  • 1、let和const命令 let声明的变量只在let所在的代码块有效,即有块级作用域,不同于var; let定义...
    风之化身呀阅读 406评论 0 1
  • 1、es5和es6的区别,说一下你所知道的es6 ECMAScript5,即ES5,是ECMAScript的第五次...
    没糖_cristalle阅读 720评论 0 0
  • let 和 const 循环语句中,每次循环都会创建一个新的代码块作用域 var a = [];for (let ...
    _于曼丽_阅读 232评论 0 0
  • [TOC] 参考阮一峰的ECMAScript 6 入门参考深入浅出ES6 let和const let和const都...
    郭子web阅读 1,855评论 0 1