|
ES6中新增加了let命令,用它聲明的變量,只在代碼塊內(nèi)有效。 什么是代碼塊? if(true){ let a=1; console.log(a); } 現(xiàn)在if語(yǔ)句用{}包裹起來(lái)的部分,算是代碼塊; for(let i=0;i<10;i++){ console.log(i); } console.log(i); 在for循環(huán)中{}包裹起來(lái)的部分是代碼塊;但是{}包裹起來(lái)的部分,能夠訪問(wèn)到for語(yǔ)句的循環(huán)條件,應(yīng)該說(shuō)在for循環(huán)中,循環(huán)條件和{}包裹來(lái)的部分,都是代碼塊,用let,在這里面聲明的變量,在外面是訪問(wèn)不到的。 while循環(huán)里面呢? let a=10; while(a<12){ a=a+1; let b=a+1; console.log(b); } console.log(b); 在這段代碼里面,window.a是undefined, b在while循環(huán)外面是訪問(wèn)不到的。 在es5中,如果我們要實(shí)現(xiàn)下面的需求: var arr=[]; for(let i=0;i<10;i++){ arr[i]=function(){ console.log(i); } } a[2](); 這里一定要用到閉包。下面代碼是用閉包來(lái)實(shí)現(xiàn)的: var arr=[]; for(var i=0;i<10;i++){ (function(val){ arr[val]=function(){ console.log(val); } })(i) } 這樣,在控制臺(tái)里面輸入arr[0](),會(huì)得到0, arr[1](),會(huì)得到1. 關(guān)于閉包的使用,這里有一個(gè)比較經(jīng)典的例子。頁(yè)面上有5個(gè)元素,都是a標(biāo)簽,你可以這樣來(lái)生成并附加到頁(yè)面上一個(gè)id為abc的div標(biāo)簽中: for(let i=0;i<5;i++){ let str="<a href='javascript:void(0)' id="+i+">"+i+"</a>" $("#abc").append(str); } 針對(duì)這些a標(biāo)簽元素,有這樣一個(gè)需求,點(diǎn)擊一個(gè)a標(biāo)簽,彈出一個(gè)提示框,提示框中顯示這個(gè)a標(biāo)簽的id號(hào)碼。下面是實(shí)現(xiàn)代碼: for(var i=0;i<5;i++){ (function(a){ $("#"+a+"").on('click',function(){ alert(a); }) })(i) } |
|
|
來(lái)自: 復(fù)雜網(wǎng)絡(luò)621 > 《Web前端》