javascript Array.from问题
思否 问答 已采纳 👍 2 含 AI 优化版
问题
javascript Array.from问题
由大模型辅助整理,保留原意,优化结构与可读性。
问题概述
提问者在使用 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,无法被call、apply、bind或类似thisArg的机制修改。 - 因此如果映射函数写成箭头函数,
Array.from传入的thisArg会被静默忽略,this依然是定义时的外层this,这正是很多人误以为「Array.from的thisArg不生效」的真正原因。
小结
Array.from 的 thisArg 只对普通函数有效;若映射函数使用箭头函数,this 由定义位置决定,thisArg 参数会被忽略。
由大模型辅助整理,保留原意,补充结构与代码格式。
回答转载自 SegmentFault