ES6之必学必会

一、箭头函数与普通函数的区别?

1、基本语法于普通函数不同

  • 函数声明方式不同
  • 如果箭头函数没有参数,直接写一个空括号即可。
  • 如果箭头函数的参数只有一个,也可以省去包裹参数的括号。
  • 如果箭头函数有多个参数,将参数依次用逗号(,)分隔,包裹在括号中即可。
  • 如果箭头函数的函数体只有一句代码,就是简单返回某个变量或者返回一个简单的JS表达式,可以省去函数体的大括号{ }。

2、箭头函数没有 prototype (原型),所以箭头函数本身没有this

​​​​​​​// 箭头函数
let a = () => {};
console.log(a.prototype); // undefined
// 普通函数
function a() {};
console.log(a.prototype); // {constructor:f}

3、箭头函数不会创建自己的this箭头函数没有自己的this
箭头函数的this指向在定义(注意:是定义时,不是调用时)的时候继承自外层第一个普通函数的this。所以,箭头函数中 this 的指向在它被定义的时候就已经确定了,之后永远不会改变。

4、箭头函数不能作为构造函数

使用我们先了解一下构造函数的new都做了些什么?
简单来说,分为四步:
① JS内部首先会先生成一个对象;
② 再把函数中的this指向该对象;
③ 然后执行构造函数中的语句;
④ 最终返回该对象实例。
但是!!因为箭头函数没有自己的this,它的this其实是继承了外层执行环境中的this,且this指向永远不会随在哪里调用、被谁调用而改变,所以箭头函数不能作为构造函数使用,或者说构造函数不能定义成箭头函数,否则用new调用时会报错!

let Fun = (name, age) => {
    this.name = name;
    this.age = age;
};

// 报错
let p = new Fun('dingFY', 24);

5、箭头函数不绑定arguments
取而代之用rest参数…代替arguments对象,来访问箭头函数的参数列表

箭头函数没有自己的arguments对象。在箭头函数中访问arguments实际上获得的是外层局部(函数)执行环境中的值。

// 普通函数
function A(a){
  console.log(arguments);
}
A(1,2,3,4,5,8);  //  [1, 2, 3, 4, 5, 8, callee: ƒ, Symbol(Symbol.iterator): ƒ]

// 箭头函数
let B = (b)=>{
  console.log(arguments);
}
B(2,92,32,32);   // Uncaught ReferenceError: arguments is not defined

// rest参数...
let C = (...c) => {
  console.log(c);
}
C(3,82,32,11323);  // [3, 82, 32, 11323]

6、箭头函数不能用作Generator函数,不能使用yield关键字

  1. let、const和var的概念与区别

  2. 变量提升与暂时性死区

  3. 变量的解构赋值

  4. 箭头函数及其this问题

  5. Symbol概念及其作用

  6. Set和Map数据结构
    ES6的Set和Map数据结构,由你制造

  7. Proxy
    JavaScript的Proxy可以做哪些有意思的事儿

  8. Reflect对象
    Reflect对象解析

  9. Promise(手撕Promise A+规范、Promise.all、Promise相关API和方法)
    异步Promise及Async/Await可能最完整入门攻略
    重点从一道让我失眠的 Promise 面试题开始,深入分析 Promise 实现细节
    手写一个Promise/A+,完美通过官方872个测试用例
    手撕遵循 Promise/A+ 规范的 Promise

  10. Iterator和for…of(Iterator遍历器的实现)
    ES6 迭代器(Iterator)和 for…of循环使用方法

  11. 循环语法比较及使用场景(for、forEach、for…in、for…of)
    for、forEach、for…of、for…in 的区别与比较

  12. Generator及其异步方面的应用
    Generator 函数的含义与用法

  13. async函数
    async 函数的含义和用法

  14. 几种异步方式的比较(回调、setTimeout、Promise、Generator、async)
    JS 异步编程六种方案

  15. class基本语法及继承

  16. 模块加载方案比较(CommonJS和ES6的Module)
    模块化

  17. ES6模块加载与CommonJS加载的原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值