es6新增箭头函数,主要解决了以下几点问题
- 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
- 不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
- 不可以使用arguments对象,该对象在函数体内不存在。
var obj = {a: 1,b: 2,c: function(){setTimeout( ()=>{console.log(this);}, 1000)},d: function(){setTimeout( function(){console.log(this)}, 1000)}}obj.c(); //objobj.d(); //window
setTimeout的this为window,所以d()会输出window,而使用箭头函数则会输出obj
var obj = {
a:
function(){
console.log(this)
},
b:
()=>{
console.log(this);
}
}
obj.a()
//obj
obj.b()
//window
|
可见箭头函数里面的this是离他最近的作用域链的this
var x = new obj.a();
var y = new obj.b();//报错
|
可见箭头函数不能使用new命令。
var obj = {
a:
function(){
console.log(arguments)
},
b:
()=>{
console.log(arguments);
}
}
obj.a()
obj.b()
//arguments is not defined
|
没有arguments。