參考阮一峰老師的JS 閉包
理解閉包前需要理解變量作用域沃暗、變量提升
先來看一下一道題目
<ul>
<li>選項(xiàng)1</li>
<li>選項(xiàng)2</li>
<li>選項(xiàng)3</li>
<li>選項(xiàng)4</li>
<li>選項(xiàng)5</li>
<li>選項(xiàng)6</li>
</ul>
/變量提升了,var item;var i;/
var item =document.querySelectorAll('li')
for (var i=0;i<item.length;i++){
items[i].onclick=function(){
console.log(i);
}
}
點(diǎn)擊li依次打印出來什么?
答案:每次打印都是6
原因:變量提升了郎汪;i是全局變量;
那如何讓它依次打印闯狱,12345呢煞赢;
因?yàn)閕是全局變量,所以首先需要把i變?yōu)榫植孔兞浚?for (var i=0;i<item.length;i++){
var temp=function(j){
items[j].onclick=function(){
console.log(j);
}
}
temp(i)
}
這樣打印的話就是依次打印123456
現(xiàn)在來說說閉包:
function f1(){
var n=999;
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
這樣就是一個(gè)閉包哄孤;
閉包的作用就是暴露局部變量照筑;