关于箭头函数里面arguments和this的问题

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对象。 


 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值