箭头函数和普通函数区别
语法更加简洁清晰
箭头函数不会创建自己的this
所以它不会有自己的this,它只会从自己的作用域链的上一层继承this,作用域链包括全局作用域,块作用域和函数作用域
- 箭头函数继承而来的this指向永远不变
对象obj的方法b时用箭头函数定义的,这个函数中的this永远指向它定义时所处的全局环境中的this,即使这个函数是作为对象obj的方法调用,它依然指向window对象
- call()/apply()/bind()无法改变箭头函数中this得指向
call()/apply()/bind()方法可以用来动态修改this的指向,但由于箭头函数的this定义时就已经确定且永远不会改变,所以使用这些犯法永远也改变不了箭头函数this的指向,但是代码也不会报错
- 箭头函数不能用作构造函数调用
构造函数的new原理:
箭头函数是ES6中的提出来的,它没有prototype,也没有自己的this指向,更不可以使用arguments参数,所以不能New一个箭头函数。
new操作符的实现步骤如下:
1、创建一个空的简单JavaScript对象(即{});
2、为步骤1新创建的对象添加属性__proto__,将该属性链接至构造函数的原型对象 ;
3、将步骤1新创建的对象作为this的上下文 ;
4、如果该函数没有返回对象,则返回this。
所以,上面的第二、三步,箭头函数都是没有办法执行的。
- 箭头函数不能用作Generator函数,不能使用yield关键字