我正在尝试构建一个定期检查无限数量变量的函数,如果它们都是假的,那么就做了什么。
该功能应该"返回"满足条件时,每隔x ms调用一次。
这里我使用setTimeout为函数调用自身,延迟时间很长,以避免快速循环和崩溃。但由于某种原因,该功能立即调用自己。它做了很多次,崩溃了浏览器(实际上我的操作系统几次)。
我似乎对嵌套功能的进展缺乏一些基本的了解。
现在,函数循环和崩溃,请注意。
违规行在函数checkIf()的末尾,有一个setTimeout再次调用函数本身。
函数查找的变量是" users [i] .listening",如果要模拟满足条件,请将它们都更改为false。
// *****DO NOT RUN THIS CODE, IT LOOPS/CRASHES BROWSERS
// *****************************************************
users = [{user:"11", listening: "true"},{user:"22", listening:"false"}];
function checkIf(){
var falses = 0; // We assume there are no users with listening = "false" yet
for (var i = 0; i < users.length; i++) { // for each user
if(users[i].listening == "false"){ // if its listening is "false"
falses++; //+1 to var falses
if (falses == users.length){ // && if all user's listening are false
userDo(); // launch the action
return true; // get out of checkIf()
}
}
}
//THIS SEEMS TO BE WHAT CAUSES THE LOOP/CRASH >>>>
setTimeout(checkIf(), 4000); //otherwise repeat every 4 seconds
}
function userDo(){ //this function makes those users do stuff
for (var i = 0; i < users.length; i++) {
console.log("user " + users[i].user +" do this or that");
}
}
checkIf(); //launch the checking function for the first time
这里是小提琴(有一些console.log用于调试)
https://jsfiddle.net/r1jo84jm/1/
感谢阅读和你的帮助。