几个例子弄懂JS 的setTimeout的运行方式
|
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 关键字的变量