js中setTimeout() 时间参数为0

当看到下面 这种setTimeout 设置为0 写法的时候一脸懵逼,完全没用过。

var fuc = [1,2,3];
for(var i in fuc){
  setTimeout(function(){console.log(fuc[i])},0);
  console.log(fuc[i]);
}

  

问:控制台会如何打印?

chrome打印结果如下:

 

setTimeout(0)的意思

SetTimeout為在一個指定的延迟时间后执行某個函數,所以如果帶入(0),則是否意味馬上執行的意思?來看下面程式碼。

setTimeout(function(){
   console.log("Hello");
},0)
console.log("Mark");
執行結果為:
Mark
Hello

嚴來來說不是立即執行,而是立即排进Task Quenu等待执行,等Call Stack空时它会至Task Quenu寻找工作,因此执行結果才为Mark Hello

如果不知道Task QuenuCall Stack可至該篇看Event Driven的觀念。

http://marklin-blog.logdown.com/posts/294474-javascript-event-driven

setTimeout非同步的范例

首先看看下面的程式碼,doSomething函数需要等到取得到data才执行,但getData会执行很久,但下面的doSomething1与2不需要data就可以执行,所以這時这种写法就會很浪費時間。

var data = getData();
doSomething(data);

doSomething1();
doSomething2();

所以我們將getDatafucntion修改為如下。

function getData(callBack){         
    setTimeout(function(){
        //getData要執行的程式碼

        callBack();
    },10);
}

然後我們整段程式碼就可以改成。

getData(doSomething);
doSomething1();
doSomething2();

上面這種寫法,我們把同步操作转变成非同步操作,getData不會阻塞住整个线程,以上就是其種一種的非同步的寫法,但這種寫法有個缺點就是很容易變成CallBack地獄。

转载于:https://www.cnblogs.com/wupeng88/p/9995327.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值