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加载的原理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值