为何未定义element、what变量代码仍可运行?forEach参数机制解惑
关于Array.forEach()参数自动传递的疑问
你的代码:
let prices= ["cartoon", "what" , "sanjay"]; prices.forEach(loop); function loop(element , what ){ document.write( what+":"+ element + "<br>"); }
问题核心
你疑惑为什么没手动定义element和what变量,代码却能正常运行,且这两个变量分别对应数组元素值和索引。
解答
这是Array.forEach()方法的内置行为:
forEach是数组的遍历方法,它会自动逐个遍历数组里的元素。- 每次遍历到一个元素时,它会主动调用你传给它的回调函数(这里就是
loop),并且按照固定顺序给这个回调函数传参:第一个参数是当前遍历到的元素值,第二个是该元素的索引,第三个(你没用到)是原数组本身。 - 你写的
element和what是loop函数的形参,当forEach调用loop时,会把当前元素值、索引作为实参传进来,JavaScript会自动把这些实参赋值给对应的形参——就像你手动写loop("cartoon", 0)一样,形参会自动承接传入的值,不需要你提前在外部定义它们。 - 函数的形参本身就相当于在函数内部声明了变量,所以不会出现“变量未定义”的报错。
内容的提问来源于stack exchange,提问作者Oarchlight
相关产品推荐
相关产品推荐

