箭头函数 => :
箭头函数代替function的,具体怎么用呢?看下面几个例子就会了。
例1:() => return东西
var data={ //以前我们经常用的写法
name:'st',
age:18,
say:function(){
return 'hello'
}
}
console.log(data.say());
//------------------------------------------------
var data={ //ES6写法
name:'st',
age:18,
say:()=>'hello1'
}
console.log(data.say());
例子2:() =>{
语句
return
}
var data={ //之前的写法
name:'st',
age:18,
say:function(a,b){
let c=a+b
return c;
}
}
console.log(data.say(2,4)); //6
//------------------------------------------------
var data={ //ES6写法
name:'st',
age:18,
say:(a,b)=>{
let c=a+b
return c;
}
}
console.log(data.say(3,5)); //8
注意点:
1. 关于this指向问题, 定义函数所在的对象,不在是运行时所在的对象(function中this是谁调用指向谁,这里this有区别)。举个栗子
var a={
name:'st',
set:function(){setTimeout(function(){
console.log(this) //window
},1000)}
}
a.set();
//----------------------------------------------------
var a={
name:'st',
set:function(){setTimeout(()=>{
console.log(this) // {name: "st", set: ƒ}
},1000)}
}
a.set();
上面那个this是指向window,因为setTimeout是window调用的。下面箭头函数的this是指向包裹它的对象。
如果有多层箭头函数那么this 就逐级寻找外层所在对象。这是我的理解,另外我百度了一下别人的说法:箭头函数不会像普通函数那样在调用的时候自动获取this值,而是会沿着作用域链查找,找到最近的外部一层作用域的this,即取得其所处的词法作用域的this值。
2. 箭头函数里面没有arguments, 用 ‘...’例如
如果非要arguments怎么办?
let fn=(...arg)=> arg
console.log(fn(1,2,3)); //[1,2,3]
3. 箭头函数不能当构造函数
未完待续。。。。。。