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 Quenu或Call 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地獄。
js中setTimeout() 时间参数为0的更多相关文章
- js中setTimeout()时间参数设置为0的探讨
起因源于一道前端笔试题: var fuc = [1,2,3]; for(var i in fuc){ setTimeout(function(){console.log(fuc[i])},0); co ...
- js中settimeout方法加参数
js中settimeout方法加参数的使用. 简单使用看w3school 里面没有参数调用, 例子: <script type="text/javascript"> ...
- 【转】JS中setTimeout和setInterval的最大延时值详解
前言 JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.而这篇文中主要给大家介绍的是关于JS中setTi ...
- js中函数的参数为函数的情况即回调函数
js中函数的参数可以是数组对象也可以是函数,当参数为函数时我们叫做回调函数 //定义回调函数function B() { console.log("函数B")setTimeout( ...
- JS中URL编码参数(UrlEncode)
JS中URL编码参数(UrlEncode) 网上有很多文字作品写涉及在JS中呈现类似UrlEncode功能时都是自定义参数来呈现,其实JS中本身就有那样的参数.参数parameter由于用类似URL的 ...
- js中的时间转换—毫秒转换成日期时间
转自:http://www.javascript100.com/?p=181 前几天,在项目中遇到js时间增加问题,要将js毫秒时间转换成日期时间 var oldTime = (new Date(&q ...
- 小程序 js中获取时间new date()的用法(网络复制过来自用)
js中获取时间new date()的用法 获取时间: 1 var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获 ...
- JS中给函数参数添加默认值(多看课程)
JS中给函数参数添加默认值(多看课程) 一.总结 一句话总结:咋函数里面是可以很方便的获取调用函数的参数的,做个判断就好,应该有简便方法,看课程. 二.JS中给函数参数添加默认值 最近在Codewar ...
- Js中获取时间 new date()的用法
Js中获取时间 new date()的用法 获取时间: var myDate = new Date();//获取系统当前时间 myDate.getYear(); //获取当前年份(2位) myDate ...
随机推荐
- 控制结构(3): 状态机(state machine)
// 上一篇:卫语句(guard clause) // 下一篇:局部化(localization) 基于语言提供的基本控制结构,更好地组织和表达程序,需要良好的控制结构. 前情回顾 上次分析了guar ...
- CodeSmith如何生成实体类
CodeSmith如何生成实体类 这是模板,然后选择对应的表.就可以生成 了 <%-- Name: Database Table Properties Author: Paul Welter D ...
- python 基础篇练习题
一.练习题 # 1.统计元组中所有数据属于字符串的个数,提示:isinstance() # 数据:t1 = (1, 2, '3', '4', 5, '6') # 结果:3 # 2.将以下数据存储为字典 ...
- [ZJOI2019]麻将(动态规划,自动机)
[ZJOI2019]麻将(动态规划,自动机) 题面 洛谷 题解 先做一点小铺垫,对于一堆牌而言,我们只需要知道这\(n\)张牌分别出现的次数就行了,即我们只需要知道一个长度为\(n\)的串就可以了. ...
- [bilibili]弹幕屏蔽列表
<filters> <item enabled="true">t=定单身</item> <item enabled="true& ...
- P1962 斐波那契数列
题面是这样的,其实斐波那契我们之前也有接触过,并不是什么太陌生的玩意,第一个想到的方法其实是用递归来做,这样的话其实是非常轻松的,but同志们你们有没有关注过这样一个鬼东西 你以为蓝题是让你切着玩的吗 ...
- LOJ#2553 暴力写挂
题意:给定两棵树T1,T2,求d1[x] + d1[y] - d1[lca1(x, y)] - d2[lca2(x, y)]的最大值. 解:考虑把上面这个毒瘤东西化一下.发现它就是T1中x,y到根的路 ...
- GoLang-Beego使用
1.beego 注意事项 beego的默认架构是mvc python的django默认是mtv package main import ( "github.com/astaxie/beego ...
- Go-常用库的介绍
一.Go常用包介绍 fmt.它实现了格式化的输入输出操作,其中的fmt.Printf()和fmt.Println()是开 发者使用最为频繁的函数. io.它实现了一系列非平台相关的IO相关接口 ...
- Kubernetes之StatefulSet
什么是StatefulSet StatefulSet 是Kubernetes中的一种控制器,他解决的什么问题呢?我们知道Deployment是对应用做了一个简化设置,Deployment认为一个应用的 ...