JavaScript-数组高阶函数find的第二个参数

前言

记录自己的一次愚蠢行为,起因是在测试Array的find函数,find函数的第二个参数是thisArg,即执行回调时用作 this 的对象,当我兴高采烈的准备测试一下第二个参数的时候,预期的结果却一直与我想的不一样。

于是在CSDN上面查找find相关的用法,结果好像前几个的搜索结果也没有第二个参数的对应演示,换到stack overflow才知道我犯了一个低级错误。

测试代码

原始代码(有错)

// find测试
let obj = {
  name: 'GingerCat',
  age: 18,
};
let arr = [10, 52, 45, 12, 788, 99];
let result = arr.find(element => {
  console.log(this);// Window
  return element > 50;
}, obj);
console.log(result);

这里console.log(this)的结果一直是Window,但是我想要的结果是{name: 'GingerCat', age: 18},我一直以为是自己使用find的姿势不正确,导致结果错误,翻了CSDN前几个回答并没有对第二个参数有演示,直到去stack overflow翻到这一篇:

Javascript Array.prototype.find second argument thisArg not working - Stack Overflow

原来,是因为我传入find的是箭头函数,而箭头函数是没有this的,所以我一直打印的是全局的this,也就是Window

修改后代码

// find测试
let obj = {
  name: 'GingerCat',
  age: 18,
};
let arr = [10, 52, 45, 12, 788, 99];
let result = arr.find(function (element) {
  console.log(this);// {name: 'GingerCat', age: 18}
  return element > 50;
}, obj);
console.log(result);

总结

JavaScript的细节很多,平时使用的时候仍然需要多加小心,不然一不小心就掉坑了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值