javascript - 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;
解决方案
因为这就是它的工作方式。的回调函数setTimeout
将被推入队列,直到堆栈变空。
分配后堆栈将变空fn = null;
。
现在事件循环会将回调推送到堆栈,因为它将是空的,因此它将执行并且因为fn
不再是函数但 null 所以不会执行任何操作console.log
。
推荐阅读
- java - 当常量字符串不在池中时是否正确?
- apache-kafka - 对生产者/经纪人拥有大量消费者的影响
- javascript - 如何修复“在'...附近解析时 JSON 输入意外结束”,“mocha”:“^3.2.0”,“s'”
- json - 如何将我的数据从 wordpress 表单提交保存到 json 文件
- go - Pubsub.pull 请求无法正常工作 - 去吧
- mongodb - 为什么在字段上使用聚合函数 $avg 时 MongoDB 返回 null
- angularjs - 我想隐藏原始输入
- javascript - 检测 Edge 浏览器的自动填充
- python - 是否会导致过度拟合/维度诅咒
- python - 如何在python中找到两个字符串的语义相似度