1.箭头函数的arguments
我们先来看下面的例子:
let func = () => {
console.log(arguments);
};
func(1);
这样会报错,提示arguments is not defined。这是因为箭头函数本身是没有arguments这个对象的,那当箭头函数里面出现arguments时,这个arguments其实是由箭头函数外层的非箭头函数来确定,准确来说是由箭头函数外层的最近一个非箭头函数来确定。我们再看下面的例子:
function func1() {
let func2 = () => {
console.log(arguments);
};
func2();
}
func1(1);
输出结果:Arguments [1, callee: ƒ, Symbol(Symbol.iterator): ƒ]。箭头函数的arguments即为外层函数func1的arguments。
2.箭头函数的this
箭头函数的this也由其外层最近的非箭头函数来确定,我们看下面这个例子:
let obj = {
name: "Jim",
getName() {
let func = () => this.name;
console.log(func());
},
};
obj.getName();
代码运行的结果为输出'Jim'。箭头函数里的this由其外层的getName函数确定,而getName的this指向调用它的对象obj,所以箭头函数的this也指向对象obj。
当箭头函数的外层没有非箭头函数的时候或者箭头函数没有外层而单独存在,则它里面的this指向window对象。
let func = () => {
console.log(this);
};
func();
则会输出window对象。