1.箭头函数相当于匿名函数,是不能作为构造函数的,不能使用new
var B = ()=>{
value:1;
}
var b = new B();//Uncaught TypeError: B is not a constructor
2.箭头函数不绑定arguments,取而代之用rest参数…解决
function A(a){
console.log(arguments);
//Arguments [2, callee: ƒ, Symbol(Symbol.iterator): ƒ]
}
var B = (b) =>{
console.log(arguments);
//ReferenceError: arguments is not defined
}
var C = (...c)=>{//...c即为rest的参数
console.log(c);//[2]
}
A(2);
B(2);
C(2);
3.箭头函数会捕获其所在上下文的this值,作为自己的this值。即箭头函数的作用域会继承自外围的作用域。外层没有普通函数this会指向全局对象
var obj = {
a:10,
b:function(){
console.log(this.a);//10
}
c:function(){
return ()=>{
console.log(this.a);//10
}
}
}
obj.b();
obj.c()();
4.箭头函数当方法使用的时候没有定义this的绑定
箭头函数在定义之后,this的值就不会发生改变,无论用什么方式调用它,this的值都不会发生改变。
其原因在于:箭头函数不会自动绑定局部变量,如this,arguments,super(ES6),new.target(ES6)等。所以箭头函数没有它自己的this的值,箭头函数内的this的值继承自外围作用域。在箭头函数中调用this时,仅仅是简单的沿着作用域链向上寻找,找到最近一个this的值拿来使用。
const button = document.getElementById('myButton');
button.addEventListener('click', () => {
this.innerHTML = 'Clicked button'; // this又指向了全局
});
5.使用call()和apply()调用 箭头函数忽略第一个参数
var obj = {
a:10,
b:function(n){
var f = (v) => v + this.a;
var c = {a:20};
return f.call(c,n);
}
}
console.log(obj.b(1));//11
6.箭头函数没有原型函数
var a = ()=>{
return 1;
}
function b(){
return 2;
}
console.log(a.prototype);//undefined;
console.log(b.prototype);//object{...}
7.箭头函数不能当做Generator函数,不能使用yield关键字
8.箭头函数不能换行
var a = ()
=> 1;//SyntaxError:Unexpected token