箭头函数是普通函数的简写,但它不具备很多函数的特性;箭头函数不能使用arguments(类数组对象,可以在函数内部访问arguments对象,从中取得传进来的每个参数值)、super和new.target,也不能用作构造函数,此外,箭头函数也没有prototype属性。
- arguments关键字访问
// arguments关键字访问
function foo() {
console.log(arguments[0], arguments[1]);
}
foo(3, 6);//3 6
let bar = () => {
console.log(arguments[0], arguments[1]);
}
bar(3, 6);//ReferenceError: arguments is not defined
- this指向
this指向问题,箭头函数指向它定义时所在的对象,而不是调用时所用的对象 <箭头函数本身没有this,但是它在声明时,可以捕获其所在上下文的this供自己使用>
//箭头函数在全局作用域声明,所以是在全局作用域中捕获this的,this指向window对象
var name = "jake";
let fn = () => {
console.log(this.name);
}
fn();//jake
/*
箭头函数是在 fn() 用作构造函数,使用new调用fn()函数之后,此函数作用域中的this指向创建的实例化对象,箭头函数此时被声明,捕获到这个this
(在哪个作用域里创建箭头函数,箭头函数的this就指向其上下文的this)。
*/
var name = "jake";
function fn() {
this.name = "bar";
let func=() => {
console.log(this.name);
}
func();
}
let en=new fn();//bar