gpt4 book ai didi

javascript - 如何在javascript中循环一个函数

转载 作者:行者123 更新时间:2023-11-29 18:42:11 25 4
gpt4 key购买 nike

我有四种不同的按钮效果,每种效果都在一个变量中声明。

因此,我将所有这四个变量放入一个名为 arr 的数组中,该数组在 clickByItself() 函数中使用 Math.floor(Math.random() ) 方法。

如果没有 for 循环,每次我重新加载页面时,代码都会随机点击四个按钮之一。

function clickByItself() {
let random = Math.floor(Math.random() * arr.length);
$(arr[random]).click();
}

但是,使用 for 循环我无法在最多 10 次内逐一进行这些点击。

var blueButtonEffect = code effect here;
var redButtonEffect = code effect here;
var greenButtonEffect = code effect here;
var yellowButtonEffect = code effect here;
var arr = [blueButtonEffect, redButtonEffect, greenButtonEffect, yellowButtonEffect];

//will click on buttons randomly
function clickByItself() {
let random = Math.floor(Math.random() * arr.length)
var i;
for (i = 0; i < 10; i++) {
$(arr[random]).click();
setTimeout(clickByItself(), 1000);
}
}

上面当前代码的最终输出是同时单击四个按钮,而不是一个接一个。

那么,我怎样才能让这个功能在每次点击间隔一秒内一次按一次随机按钮 10 次?

最佳答案

要修复您的代码,您需要:

  1. 递归的基本情况
  2. 将函数引用传递给 setTimeout。目前,您正在执行 clickByItself 并将其返回值(未定义)传递给 setTimeout。
  3. 不要在没有将时间增加 i 倍的情况下在循环中使用 setTimeout,因为 for 循环将同时对所有函数调用进行排队
  4. 或者,您可以使用“times”参数来避免循环

你可以尝试类似的东西

function clickByItself(times = 0) {
let random = Math.floor(Math.random() * arr.length)
$(arr[random]).click();
if (++times < 10) {
setTimeout(function(){clickByItself(times);}, 1000);
}
}

控制台日志示例 https://jsfiddle.net/pfsrLwh3/

关于javascript - 如何在javascript中循环一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56262463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com