这段有趣的JavaScript代码是如何工作的?
我的一个朋友让我注意到了一段JavaScript代码,它在flashcard网站Quizlet的比赛游戏中为你提供了不切实际的时间分数。它会在用户指定的时间停止游戏计时器这段有趣的JavaScript代码是如何工作的?,javascript,Javascript,我的一个朋友让我注意到了一段JavaScript代码,它在flashcard网站Quizlet的比赛游戏中为你提供了不切实际的时间分数。它会在用户指定的时间停止游戏计时器 document.getElementsByClassName("UIButton UIButton--hero")[0].click(); setTimeout(function(){for(var F = setTimeout(";"), i = 0; i < F; i++)
document.getElementsByClassName("UIButton UIButton--hero")[0].click();
setTimeout(function(){for(var F = setTimeout(";"), i = 0; i < F; i++) clearTimeout(i)}, 5100); //Change 5100
document.getElementsByCassName(“UIButton UIButton--hero”)[0]。单击();
setTimeout(函数(){for(var F=setTimeout(;”),i=0;i
使用它很简单,您就可以进入比赛游戏(例如),只需在控制台的inspect菜单中输入此代码。然后你需要完成游戏,但不管你花多长时间
我不知道JavaScript(我对Python非常了解),但我已经知道,到目前为止,第一行单击start按钮,第一个setTimeout函数等待指定的时间执行其中的函数。让我困惑的是内在的功能。它似乎只是创建并清除了一系列超时。我不知道这怎么会停止游戏计时器
如果有人能解释它是如何工作的,那将是非常感谢的啊,这是一段非常有趣的代码,非常聪明。下面是正在发生的事情 内部函数基本上具有以下功能(为了可读性而扩展):
var F=setTimeout(“;”)
对于(i=0;i
setTimeout可以接受在超时后计算的函数或字符串。他们只是通过了“禁止行动”;“,他们甚至都没有经过。他们关心的是计时器id“F”。如果转到开发工具(在非繁忙页面上),并将setTimeout(“;”)放在控制台中,您将看到它将首先返回id 0,然后返回1,然后返回2,依此类推。ID计数
所以,你可以想象这个时间线:
啊,这是一段非常有趣的代码,非常聪明。下面是正在发生的事情 内部函数基本上具有以下功能(为了可读性而扩展):
var F=setTimeout(“;”)
对于(i=0;i
setTimeout可以接受在超时后计算的函数或字符串。他们只是通过了“禁止行动”;“,他们甚至都没有经过。他们关心的是计时器id“F”。如果转到开发工具(在非繁忙页面上),并将setTimeout(“;”)放在控制台中,您将看到它将首先返回id 0,然后返回1,然后返回2,依此类推。ID计数
所以,你可以想象这个时间线:
在我进入答案部分之前,您应该了解关于setTimeout()的几件事:
const id1=setTimeout(()=>console.log('setTimeout with callback fn'),1000,'uuz');
const id2=setTimeout('console.log(“带代码字符串的setTimeout”)”,2000);
log('1st setTimeout()的id为:',id1);
log('second setTimeout()的id为:',id2)代码>在我进入答案部分之前,您应该了解关于setTimeout()的几件事:
setTimeout()函数可以接受回调函数作为其第一个参数,也可以接受“字符串”中的代码
每当调用setTimeout()函数时,它都会返回一个超时id,当您想要清除特定超时时,可以使用该id传递到clearTimeout()函数
现在,请运行下面的代码段,看看会发生什么:
a) 在第一个setTimeout调用中,我传递了一个回调函数,将返回的id存储在常量变量“id1”中
b) 在第二个setTimeout调用中,我传递一个代码字符串,将返回的id存储在常量变量“id2”中
const id1=setTimeout(()=>console.log('setTimeout with callback fn'),1000,'uuz');
const id2=setTimeout('console.log(“带代码字符串的setTimeout”)”,2000);
log('1st setTimeout()的id为:',id1);
log('second setTimeout()的id为:',id2)
settimeout返回的索引比以前任何时候都大。settimeout返回的索引比以前任何时候都大。这是有道理的,我也浏览了网站的代码,确实找到了负责更新计时器的settimeout。这是有道理的,此外,我浏览了网站的代码,确实找到了负责更新计时器的setTimeout。
var F = setTimeout(";")
for(i = 0; i < F; i++) clearTimeout(i)