幾個例子弄懂JS 的setTimeout的運行方式
阿新 • • 發佈:2017-05-10
-a highlight margin java p s .com cti x11 on()
function test() {
var a = 1 ;
setTimeout(function() {
alert(a);
a = 5 ;
}, 1000 );
}
test();
alert( 0 ); //前面的兩個setTimeout延遲了 所以先執行這個
|
結果:先彈出0,然後彈出1。
例子2
function test() {
var a = 1 ;
setTimeout(function() {
alert(a);
a = 5 ;
}, 1000 );
lert(a);
}
test();
alert( 0 );
|
結果:先彈出1,然後彈出0,最後彈出1 。
先執行test()裏的alert(),因為function此時還未執行,因此,a任然為1.因為function還在被延遲著,因此,執行了alert(0),最後到時間了,執行了alert(a),因為前面a已經變為1了,所以,最後彈出的是1.
例子:3:
function test() {
var a = 1 ;
setTimeout(function() {
alert(a);
a = 5 ;
}, 1000 );
a = 19 ;
}
test();
alert( 0 ); //前面的alert因為setTimeout延遲了 所以先執行這個。
|
結果:會先彈出0,然後彈出19.
延遲了function() {
alert(a);
a = 5;
}
但是a=19還是會照常執行,不是等到延遲結束。所以,執行這個被延遲函數的時候,a=19了!
例子4
function test() {
var a = 1 ;
setTimeout(function() { alert(a);
a = 5 ;
}, 1000 );
a = 19 ;
setTimeout(function() {
alert(a);
a = 4 ;
}, 3000 );
}
test();
alert( 0 ); //前面的兩個setTimeout延遲了 所以先執行這個
|
結果:會先彈出0,然後彈出19,最後彈出5.
附加解釋下全局變量和局部變量!
全局變量:在函數之外定義,或在函數內賦值但前面沒加 var 關鍵字的,都是全局變量
局部變量:定義在函數之內,且前面有 var 關鍵字的變量
幾個例子弄懂JS 的setTimeout的運行方式