0

我有这段代码,我使用两个 javascript 函数为我做一些操作。一个函数进行一些计算,但在执行其他任何操作之前调用另一个函数。当另一个函数返回给它时,它应该进行最后的计算。

问题:对另一个函数的调用没有正确执行。甚至在第二个函数返回之前,第一个函数完全执行。 代码:

firstfunction{

        secondfunction();

        do something more nothing related to second
     }

secondfunction(){

           setTimeout(func1(){
               do something independently
                 then call func1 depending on some condition
               },time);     
         }

第二个功能也在其他地方使用并且工作正常。

我的问题: 我使用这段代码认为第一个函数在第二个函数完全执行之前不会执行。这样对吗?这不是javascript函数应该运行的方式吗?第一个函数在第二个返回之前完全执行。我确信这一点,因为在第二次返回图形的位置后,首先应该将该图形放在屏幕上。但是第一个完全执行,图形被笨拙地放置在屏幕上,观众可以看到它移动到第二个循环给出的正确位置。是setTimeout造成这个问题吗?请帮忙。

4

2 回答 2

0

发生这种情况是因为您使用setTimeout. setTimeout将使其异步。设置间隔后将完成第二个函数的执行,执行流程将返回到第一个函数。因此,您必须拆分您的第一个功能并制作第三个功能,该功能将具有最后的步骤。这第三个函数必须从setTimeout处理程序中调用。

     function firstfunction(){

        secondfunction(params);

     }

     function secondfunction(params){

           setTimeout(func1(){
               do something independently
                    then call thirdfunction depending on some condition
               },time);     
     }

     function thirdfunction(params){
         do something more nothing related to second
     }

在这种方法中,您必须将所有内容作为参数从一个函数传递到另一个函数。

您也可以通过将第三个设置为回调函数来以不同的方式执行此操作。这样,您可以使 firstfunction 范围内的所有内容都可用于 thirdfunction。

     function firstfunction{

        secondfunction(thirdfunction);

        function thirdfunction(){
            do something more nothing related to second
        }

     }

     function secondfunction(callback){

           setTimeout(func1(){
               do something independently
                 then call callback depending on some condition
               },time);     
     }
于 2012-08-14T06:19:19.980 回答
0

“即使在第二个函数返回之前,第一个函数也会完全执行。”

不,实际上第二个函数在调用后立即返回setTimeout()- 它不会等待超时发生。您传递给的func1()函数setTimeout()将在指定的超时延迟后稍后被调用,但同时执行将继续调用之后的任何内容setTimeout()(在这种情况下,函数的结尾跟随,所以它返回到第一个函数,然后是第一个函数的其余部分功能继续)。换句话说,setTimeout()不会暂停执行。

如果您需要在超时后发生某些事情,您需要将它放在您传递给的函数中setTimeout()或从该函数调用它。

于 2012-08-14T06:19:22.387 回答