箭头函数
特点:
1、this指向离自己最近的外层作用域的对象;
2、不能当做构造函数使用(箭头函数是匿名函数,没有函数名字,没办法new);
箭头函数中的this指向的是定义时的this,而不是执行时的this
//语法一:function换成了 ()=>
var fn=(a)=>{
console.log(a)
}
fn(10)
//语法二 不写{}默认表示return,当前函数意思是返回a这个值
var fn=a=>a;
fn(10)
//语法三 不写{}表示return,当前函数意思是返回一个对象
var fn=a=>({a:1});
fn()
和普通函数的区别
不绑定this
不绑定this的意思就是说:箭头函数的this是在定义的时候就确定好的,以后不管怎样调用箭头函数,箭头函数的this始终未定义的this
不绑定arguments
箭头函数还有一个比较有特点的地方就是其不绑定arguments,即如果你在箭头函数中使用arguments参数不能得到想要的内容。
什么时候最好不要使用箭头函数
作为对象的方法
最好不要在对象的方法中使用箭头函数,这样可能会导致一些问题的产生。除非你很熟悉箭头函数。
let obj = {
myVar: 'foo',
myFunc: () => {
console.log(this.myVar)
}
}
obj.myFunc() // undefined
不能作为构造函数
由于箭头函数的this不绑定的特点,所以不能使用箭头函数作为构造函数,实际上如果这样做了,也会报错。
经典的函数表达式可以用来构造这样一个新对象,但是箭头函数没有prototype 原型。不能new
let Person = function(name, height) {
this.name = name
this.height = height
}
Person.prototype.hello = function() {
console.log('Hi, my name is ' + this.name)
}
let alice = new Person('Alice', 1.7)
alice.hello() // Hi, my name is Alice
定义原型方法