JavaScript中如何将函数作为参数传递而非其返回值
解决函数传参时被提前执行的问题
嘿,这个坑我刚学JS的时候也踩过!问题出在你传递参数的方式上——当你写repeatFunction(roll(), n)的时候,JS会先执行roll(),把它返回的1-6随机数当成参数传给repeatFunction,而不是把roll这个函数本身传进去。这就导致你的repeatFunction拿到的是个数字,根本没法重复调用它。
要解决这个问题很简单,分两步来:
第一步:传递函数本身,不要加括号
调用repeatFunction的时候,直接传roll(不带括号)就行,比如:repeatFunction(roll, 5); // 这里传的是roll函数的引用,不会立即执行不带括号的函数名就是函数的“指针”,相当于告诉JS:“我要传的是这个函数本身,不是它执行后的结果”。
第二步:在
repeatFunction内部正确调用传入的函数
你的repeatFunction需要在循环里主动调用传入的函数,而不是直接用它。比如正确的repeatFunction实现应该是这样:function repeatFunction(func, n) { for (let i = 0; i < n; i++) { // 每次循环都调用传入的函数,拿到随机结果 const rollResult = func(); console.log(`第${i+1}次掷骰子结果:${rollResult}`); } }
这样一来,当你调用repeatFunction(roll, 3)时,就会真正执行3次roll(),每次返回不同的随机数啦。
内容的提问来源于stack exchange,提问作者cjdcs
相关产品推荐
相关产品推荐

