Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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 为什么这个简单的回调在setTimeout之前执行?_Javascript_Callback - Fatal编程技术网

Javascript 为什么这个简单的回调在setTimeout之前执行?

Javascript 为什么这个简单的回调在setTimeout之前执行?,javascript,callback,Javascript,Callback,此代码段将“输出2”记录在“输出1”之前,由于设置超时,这是很酷的 const func1=()=>{ 设置超时(()=>{ console.log('output 1'); }, 3000); }; 常量func2=()=>{ console.log('output 2'); }; func1(); func2() 为什么func1不在func2之前执行 是的 Func1设置运行时的超时 Func2日志 3秒钟后,调用传递给setTimeout的回调函数 如果要使Func2在步骤3之后运行,

此代码段将“输出2”记录在“输出1”之前,由于设置超时,这是很酷的

const func1=()=>{
设置超时(()=>{
console.log('output 1');
}, 3000);
};
常量func2=()=>{
console.log('output 2');
};
func1();
func2()
为什么func1不在func2之前执行

是的

  • Func1设置运行时的超时
  • Func2日志
  • 3秒钟后,调用传递给
    setTimeout
    的回调函数
  • 如果要使Func2在步骤3之后运行,则需要在传递给
    setTimeout
    的回调结束时调用它

    为什么func1不在func2之前执行

    是的

  • Func1设置运行时的超时
  • Func2日志
  • 3秒钟后,调用传递给
    setTimeout
    的回调函数

  • 如果要在步骤3之后运行Func2,则需要在传递给
    setTimeout
    的回调结束时调用它

    函数2不会等待函数1中启动的计时器完成

    func1();
    func2();
    
    执行这两个函数时,函数1设置计时器,函数2注销

    最终,函数1在3秒钟后注销


    您的第二个代码片段也差不多。

    简单解释-

    函数2不会等待函数1中启动的计时器完成

    func1();
    func2();
    
    执行这两个函数时,函数1设置计时器,函数2注销

    最终,函数1在3秒钟后注销


    您的第二个代码段的作用与此基本相同。

    JavaScript不会等待setTimeout完成,然后执行下一个函数。 当javascript遇到setTimeOut时,它会使用提供的超时存储函数,在本例中为3秒。在将它存储在调用堆栈中之后,它只开始执行它下面的函数,因为第二个函数中并没有任何内容,所以它会立即执行(显然是在3秒钟之前)。这就是为什么在第一个函数的日志之前看到第二个函数的日志。 要执行第一个函数,然后执行第二个函数,可以使用承诺链接。 例如:


    希望这会有帮助。如果我错了,请随意更正。

    JavaScript不会等待setTimeout完成,然后执行下一个函数。 当javascript遇到setTimeOut时,它会使用提供的超时存储函数,在本例中为3秒。在将它存储在调用堆栈中之后,它只开始执行它下面的函数,因为第二个函数中并没有任何内容,所以它会立即执行(显然是在3秒钟之前)。这就是为什么在第一个函数的日志之前看到第二个函数的日志。 要执行第一个函数,然后执行第二个函数,可以使用承诺链接。 例如:


    希望这会有帮助。如果我错了,请随意更正。

    为什么要这样做?您的
    main()。它不会改变脚本的任何流程。
    setTimeout
    异步传递函数的寄存器默认情况下不会这样做。为什么要这样做?您的
    main()。它不会改变脚本的任何流程。
    setTimeout
    异步传递函数的寄存器默认情况下不会这样做。您能给我看一个使func2在步骤3后运行的代码吗?您能给我看一个使func2在步骤3后运行的代码吗?