为什么相同的代码在另一种形式下可以工作而不能工作

Why same code works and does not work in another form

本文关键字:工作 不能 代码 另一种 为什么      更新时间:2023-09-26

我有两个javascript代码。两个代码为相同的工作工作,但有一个代码工作,而另一个代码不工作。

var i = 0;
function slideShow(){
    i++;
    document.getElementsByName('SearchBox')[0].value = i
    setTimeout(slideShow, 1000);
}
<<p> 不工作/strong>
var i = 0;
function slideShow(){
    setTimeout(function(){
        i++;
        document.getElementsByName('SearchBox')[0].value = i
    }, 1000);
}

为什么一个工作而另一个不工作

第一个版本,当被调用时,做一些事情,然后设置一个超时来再次调用自己。

第二个版本,当被调用时,设置一个超时来执行一些代码。不会再调用自己

在第一个示例中,slideShow将自己传递给setTimeout,因此每次运行时,它都会设置自己在一秒钟后再次运行。

在第二个示例中,这不会发生。所以这个函数只运行一次。

它们在功能上并不相同。

在第一个(工作)代码片段中,在调用slideShow()时,它做它的事情,然后在1秒后调度另一个调用。

第二个版本调度匿名函数一次调用。在任何时候都不会再次安排函数调用