javascript Array.from问题

思否 问答 已采纳 👍 2 含 AI 优化版

问题

javascript Array.from问题

在 SegmentFault 查看原问题 →

由大模型辅助整理,保留原意,优化结构与可读性。

问题概述

提问者在使用 Array.from 时遇到了与 this 指向相关的问题(原问题未附具体代码,标题为「javascript Array.from 问题」),推测是在 Array.from 的映射函数中使用箭头函数、并尝试通过 thisArg 参数改变 this 指向时出现了异常。

涉及技术

JavaScript、Array.from、this 绑定、箭头函数

期望结果

希望理解为什么 Array.from 中传入箭头函数作为映射函数时,this 指向无法按预期被修改。

回答

原始回答

箭头函数造成的吧,箭头函数的this比较特殊,不能修改

AI 优化 · 回答整理

解答思路

问题根源在于箭头函数本身没有自己的 this,它的 this 在定义时就已经确定(继承自外层作用域),因此即便 Array.from(arrayLike, mapFn, thisArg) 提供了 thisArg 参数用来指定 mapFn 内部的 this,如果 mapFn 是箭头函数,这个 thisArg 也不会生效。

详细说明

  • Array.from 的第三个参数 thisArg 是用来指定第二个参数(映射函数)执行时的 this 值。
  • 但这一机制的前提是映射函数是普通函数——普通函数的 this 由调用方式决定,因此可以被 thisArg 重新绑定。
  • 而箭头函数不遵循「调用者决定 this」的规则,它的 this 在函数定义的那一刻就已经固定为外层作用域的 this,无法被 callapplybind 或类似 thisArg 的机制修改。
  • 因此如果映射函数写成箭头函数,Array.from 传入的 thisArg 会被静默忽略,this 依然是定义时的外层 this,这正是很多人误以为「Array.fromthisArg 不生效」的真正原因。

小结

Array.fromthisArg 只对普通函数有效;若映射函数使用箭头函数,this 由定义位置决定,thisArg 参数会被忽略。

由大模型辅助整理,保留原意,补充结构与代码格式。

回答转载自 SegmentFault

评论

评论功能即将开放。你也可以通过 邮件GitHub Issue 反馈。