Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这段有趣的JavaScript代码是如何工作的?_Javascript - Fatal编程技术网

这段有趣的JavaScript代码是如何工作的?

这段有趣的JavaScript代码是如何工作的?,javascript,Javascript,我的一个朋友让我注意到了一段JavaScript代码,它在flashcard网站Quizlet的比赛游戏中为你提供了不切实际的时间分数。它会在用户指定的时间停止游戏计时器 document.getElementsByClassName("UIButton UIButton--hero")[0].click(); setTimeout(function(){for(var F = setTimeout(";"), i = 0; i < F; i++)

我的一个朋友让我注意到了一段JavaScript代码,它在flashcard网站Quizlet的比赛游戏中为你提供了不切实际的时间分数。它会在用户指定的时间停止游戏计时器

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计数

所以,你可以想象这个时间线:

  • 随机背景的东西发生了
  • 该网页使用setTimeout启动一个超时,假设id为7
  • 更多背景资料
  • 此脚本将执行。它会创建一个超时,并返回一个比过去任何超时都大的id。假设id是9
  • 现在,脚本遍历从0到9的所有id,通过将id传递给clearTimeout来停止任何活动超时。这包括清除id 7的超时

  • 啊,这是一段非常有趣的代码,非常聪明。下面是正在发生的事情

    内部函数基本上具有以下功能(为了可读性而扩展):

    var F=setTimeout(“;”)
    对于(i=0;i
    setTimeout可以接受在超时后计算的函数或字符串。他们只是通过了“禁止行动”;“,他们甚至都没有经过。他们关心的是计时器id“F”。如果转到开发工具(在非繁忙页面上),并将setTimeout(“;”)放在控制台中,您将看到它将首先返回id 0,然后返回1,然后返回2,依此类推。ID计数

    所以,你可以想象这个时间线:

  • 随机背景的东西发生了
  • 该网页使用setTimeout启动一个超时,假设id为7
  • 更多背景资料
  • 此脚本将执行。它会创建一个超时,并返回一个比过去任何超时都大的id。假设id是9
  • 现在,脚本遍历从0到9的所有id,通过将id传递给clearTimeout来停止任何活动超时。这包括清除id 7的超时

  • 在我进入答案部分之前,您应该了解关于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()函数时,它都会返回一个超时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)