转载 目录:
http://www.cnblogs.com/destinyruru/p/5823760.html
http://www.qdfuns.com/notes/17398/e8a1ce8f863e8b5abb530069b388a158/page/3.html#tagsbar
etTimeout是定时器,这个自行去了解,我想说的是这个0ms是咋回事
根据http://www.cnblogs.com/fullhouse/archive/2012/10/10/2718542.html这篇文章的描述有,
在实践中,setTimeout 会在其完成当前任何延宕事件的事件处理器的执行,以及完成文档当前状态更新后,告诉浏览器去启用 setTimeout 内注册的函数。
就题论题的讲,就是说script脚本加载完成了之后,setTimeout才会执行注册的函数,那么有多少setTimeout?
每个for循环都会执行一次setTimeout,并且第二个参数为0,就是说,等脚本执行完毕,会有100个function依次执行,那么每次function都会打印i,那么问题来了,此时脚本已经加载完毕,这时候i值多少?此时i值即为100。所以会打印出100个100来。
弄清楚这个,下面我自己测试了俩个用例,也挺有意思的,知道上面这个原理(如果你懂得),也不难弄明白下面这俩个例子的执行结果为何不同
代码: <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="renderer" content="webkit">
<title>demo</title>
</head>
<body>
<p>触发按钮时,请注意链接的变化</p>
</body>
<script type="text/javascript">
var j = 0;
for(var i=0;i<100;i++){
setTimeout(function(){
console.log("j:"+j);
console.log("i:"+i);
j++;
},0);
}
</script>
</html>
执行代码结果如下。
15:17:46.788 abc.html:15 j:0
15:17:46.788 abc.html:16 i:100
15:17:46.788 abc.html:15 j:1
15:17:46.788 abc.html:16 i:100
15:17:46.788 abc.html:15 j:2
15:17:46.788 abc.html:16 i:100
15:17:46.788 abc.html:15 j:3
15:17:46.788 abc.html:16 i:100
15:17:46.788 abc.html:15 j:4
script脚本加载完成了之后,setTimeout才会执行注册的函数
每个for循环都会执行一次setTimeout,并且第二个参数为0,就是说,等脚本执行完毕,会有100个function依次执行,那么每次function都会打印i,那么问题来了,此时脚本已经加载完毕,这时候i值多少?此时i值即为100。所以会打印出100个100来。