首页 > 解决方案 > setTimeout(..0) 排序

问题描述

在学习 JS 的过程中,下面的代码对我来说很神秘。

下面的代码永远不会打印出'this is fn'?

我不确定fn=null;在回调函数之前总是先调用 setTimtout(..,0)

function fn(){
    console.log('this is fn');
}

var intv = setTimeout( function(){ 
    intv = null;
    if (fn) fn();
}, 0 ); 

fn = null;

标签: javascriptasynchronouscallbacksettimeout

解决方案


因为这就是它的工作方式。的回调函数setTimeout将被推入队列,直到堆栈变空。

分配后堆栈将变空fn = null;

现在事件循环会将回调推送到堆栈,因为它将是空的,因此它将执行并且因为fn不再是函数但 null 所以不会执行任何操作console.log


推荐阅读