JavaScript map方法参数执行逻辑解惑:alert('first')为何先执行且仅一次?
问题解析:为什么
alert('first')先弹出且仅执行一次 核心原因:Array.prototype.map的参数求值逻辑
要搞懂这个现象,得先明确map方法的参数规则:
map接收两个参数:第一个是遍历回调函数(数组每个元素都会触发一次),第二个是**thisArg**(用来指定回调执行时的this指向)。- 关键差异:第二个参数
thisArg是在调用map的瞬间就被求值,而非等到回调函数执行时才处理。
具体执行顺序
- 当调用
[1,2,3].map(...)时,JS引擎会先解析并执行所有传入map的参数:- 优先处理第二个参数
alert('first'):直接执行这个函数调用,弹出'first',并将它的返回值(alert默认返回undefined)作为thisArg传给map。
- 优先处理第二个参数
- 完成参数处理后,
map才开始遍历数组,对每个元素执行第一个参数的回调函数v => alert(v),依次弹出1、2、3。
为什么alert('first')只执行一次
因为thisArg只需要被求值一次——它的作用是给所有回调执行时统一指定this,不管数组包含多少元素,这个参数只会在map调用的初期计算一次,所以alert('first')只会触发一次。
内容的提问来源于stack exchange,提问作者kofifus
相关产品推荐
相关产品推荐

