閉包就是一個(gè)函數(shù),兩個(gè)函數(shù)彼此嵌套,內(nèi)部函數(shù)就是閉包,形成閉包條件是內(nèi)部函數(shù)需要通過(guò)return給返回出來(lái).
同一個(gè)閉包機(jī)制可以創(chuàng)建多個(gè)閉包函數(shù)出來(lái),它們彼此沒(méi)有聯(lián)系,都是獨(dú)立的。并且每個(gè)閉包函數(shù)可以保存自己個(gè)性化的信息。
<script>function f1(num){ function f2(){ console.log("數(shù)字:"+(num++)); } return f2();}var fa=f1(200);var fb=f1(50);fa(); //200fa(); //201fa(); //202fb(); //50fb(); //51fb(); //52</script>案例
<script>//生成數(shù)組元素var num=new Array();for(var i=0; i<4; ++i) {//num[i]=閉包; //閉包被調(diào)用4次,會(huì)生成4個(gè)獨(dú)立的函數(shù) num[i]=f1(i);}function f1(n) { function f2(){ console.log(n); } return f2;}num[2](); //2num[1](); //1num[0](); //0num[3](); //3</script>利用閉包,4個(gè)li鼠標(biāo)移入增加背景顏色,移除恢復(fù)背景顏色
<body> <h2></h2> <ul> <li>student</li> <li>teacher</li> <li>farmer</li> <li>workman</li> </ul></body><script>var lis = document.getElementsByTagName('li');//給每個(gè)li設(shè)置mouSEOver和mouseout事件 for(var i=0; i<4; i++){ //利用閉包,創(chuàng)建多個(gè)事件函數(shù),他們都是獨(dú)立的 //并且可以訪問(wèn)到"各自的li元素節(jié)點(diǎn)" lis[i].onmouseover = over(i);//閉包 lis[i].onmouseout = out(i);//閉包 } function over(n){ function f2(){ lis[n].style.backgroundColor = "lightgreen"; } return f2; } function out(n){ function f2(){ lis[n].style.backgroundColor = ""; } return f2; }</script>新聞熱點(diǎn)
疑難解答
圖片精選