我是JavaScript新手,觀察到身體標記中的2個函數onload =「expand(); fadeOut();」鏈接http://jsfiddle.net/ankur3291/F8pXj/6/是按順序排列的,所以必須逐一執行,但是當看到結果時,似乎兩個函數都在同時運行。爲什麼這樣?他們爲什麼不連續執行? (PLZ不要嘗試更新在指定的鏈接代碼....因爲鏈接會再更改) 另請參見下面的代碼:功能在一個接一個的順序在JavaScript中同時工作
<html>
<head>
<title>dimensions</title>
<style type='text/css'>
body{margin:0;}
.box{display:block;background-color:green;}
#container{height:100px;width:100px;position:relative;top:150px;left:150px;}
#contain{display:block;position:fixed;height:200px;width:200px;top:100px;left:100px;font-size:50px;t
ext-align:center;line-height:200px;opacity:0;background-color:orange;}
</style>
<script type='text/javascript'>
function expand(){
var obj=document.getElementById("container");
var h=100
var w=100
var t=150
var l=150
function frame()
{
t=t-2;
l=l-1.97*2;
h=h+4;
w=w+1.96*4;
obj.style.height=h+'px';
obj.style.width=w+'px';
obj.style.top=t+'px';
obj.style.left=l+'px';
if(t<=5 || l<=5)
clearInterval(timer);
}
var timer=setInterval(frame,1);
}
function fadeOut(){
var obj=document.getElementById("contain");
var o=0;
function frame(){
obj.style.opacity=o;
o=o+0.01;
if(o>=1)
clearInterval(timer);
}
var timer=setInterval(frame,1);
}
</script>
</head>
<body onload="expand();fadeOut();">
<div class="box" id="container">
</div>
<div id="contain">
Unicorn
</div>
</body>
</html>
現在我真的變得更加困惑,有些人說(我向他們說過)javascript是多線程的,但你說它本質上是單線程的。你可以提供任何有關這方面的證據嗎? 此外,正如你所說的「動畫塊」...如果我沒有錯,你說它的setInterval()語句,不是這些函數立即運行,如果他們立即運行,這兩個函數似乎不會並行運行,還是像現在每個setInterval語句都有兩個線程,並且它們在幾毫秒內切換以執行? Plz澄清這一點! –
@AnkurShah John Resig在http://ejohn.org/blog/how-javascript-timers-work/中解釋了JavaScript執行在單個線程中運行。他還解釋了'setInterval'和'setTimeout'是如何工作的,所以一定要閱讀他的文章。如果您想了解更多有關唯一異步功能(即* events *)如何工作的信息,請查看此問題的非常詳細的第一個答案:http://stackoverflow.com/questions/2734025/is-javascript-guaranteed-to - 是單線程的 –