閉包
閉包的本質(zhì)就是函數(shù)嵌套,就是在函數(shù)里面定義函數(shù),
內(nèi)部函數(shù)可以引用外部函數(shù)的參數(shù)和變量
參數(shù)和變量不會被垃圾回收機(jī)制給回收
閉包的用途:可以存循環(huán)的索引值蛤铜、做私有變量計(jì)數(shù)器
閉包的一般寫法
function aa(b){
var a = 12;
function bb(){
alert(a);
alert(b);
}
return bb;
}
var cc = aa(24)
//單次定時(shí)器
var timer = setTimeout(function(){
alert('hello!');
}, 3000);
//清除單次定時(shí)器
clearTimeout(timer);
//反復(fù)循環(huán)定時(shí)器
var timer2 = setInterval(function(){
alert('hi~~~');
}, 2000);
//清除反復(fù)循環(huán)定時(shí)器
clearInterval(timer2);
循環(huán)語句:
通過循環(huán)語句可以反復(fù)的執(zhí)行一段代碼多次
while循環(huán)
- 語法:
while(條件表達(dá)式){
語句...
}
- while語句在執(zhí)行時(shí)郊闯,
先對條件表達(dá)式進(jìn)行求值判斷,
如果值為true石洗,則執(zhí)行循環(huán)體,
循環(huán)體執(zhí)行完畢以后,繼續(xù)對表達(dá)式進(jìn)行判斷
如果為true拷淘,則繼續(xù)執(zhí)行循環(huán)體,以此類推
如果值為false指孤,則終止循環(huán)
do...while循環(huán)
- 語法:
do{
語句...
}while(條件表達(dá)式)
- 執(zhí)行流程:
do...while語句在執(zhí)行時(shí)启涯,會先執(zhí)行循環(huán)體,
循環(huán)體執(zhí)行完畢以后恃轩,在對while后的條件表達(dá)式進(jìn)行判斷结洼,
如果結(jié)果為true,則繼續(xù)執(zhí)行循環(huán)體叉跛,執(zhí)行完畢繼續(xù)判斷以此類推
如果結(jié)果為false松忍,則終止循環(huán)
實(shí)際上這兩個(gè)語句功能類似,不同的是while是先判斷后執(zhí)行筷厘,
而do...while會先執(zhí)行后判斷鸣峭,
do...while可以保證循環(huán)體至少執(zhí)行一次,
而while不能
for語句敞掘,也是一個(gè)循環(huán)語句叽掘,也稱為for循環(huán)
在for循環(huán)中,為我們提供了專門的位置用來放三個(gè)表達(dá)式:
1.初始化表達(dá)式
2.條件表達(dá)式
3.更新表達(dá)式
for循環(huán)的語法:
for(①初始化表達(dá)式;②條件表達(dá)式;④更新表達(dá)式){
③語句...
}
for循環(huán)的執(zhí)行流程:
①執(zhí)行初始化表達(dá)式玖雁,初始化變量(初始化表達(dá)式只會執(zhí)行一次)
②執(zhí)行條件表達(dá)式更扁,判斷是否執(zhí)行循環(huán)。
如果為true,則執(zhí)行循環(huán)③
如果為false浓镜,終止循環(huán)
④執(zhí)行更新表達(dá)式溃列,更新表達(dá)式執(zhí)行完畢繼續(xù)重復(fù)②
任意一種循環(huán)都可以互相嵌套
反復(fù)循環(huán)定時(shí)器,每30毫秒修改一次盒子的left值
var timer = setInterval(function(){
left += 2;
oBox.style.left = left + 'px';
//當(dāng)left值大于700時(shí)停止動畫(清除定時(shí)器)
if(left > 700){
clearInterval(timer);
}
},30);
}