1.創(chuàng)建10個(gè)a標(biāo)簽年扩,點(diǎn)擊時(shí)彈對(duì)應(yīng)的序號(hào)
常見(jiàn)錯(cuò)誤做法 ?
var a
for (var i = 0; i < 10; i++) {
a=document.createElement('a')
a.innerHTML=i
a.addEventListener('click',function(e){
e.preventDefault()//取消默認(rèn)事件
alert(i)
})
document.body.appendChild(a)
}
結(jié)果:點(diǎn)擊每個(gè)元素均彈出 10
分析:點(diǎn)擊事件點(diǎn)擊的時(shí)候for循環(huán)執(zhí)行完畢蚁廓,并且i作用域是全局作用域,i的值已經(jīng)變?yōu)?0厨幻,故點(diǎn)擊10個(gè)元素均為10
正確做法??
let a
for (let i = 0; i < 10; i++) {
a = document.createElement('a')
a.innerHTML = i
a.addEventListener('click', function (e) {
e.preventDefault() //取消默認(rèn)事件
alert(i)
})
document.body.appendChild(a)
}
結(jié)果:點(diǎn)擊每個(gè)元素彈對(duì)應(yīng)的序號(hào)
分析:let i定義在for循環(huán)塊級(jí)作用域內(nèi)相嵌,每次for循環(huán)執(zhí)行的時(shí)候都會(huì)形成一個(gè)新的塊,每個(gè)塊及作用域下都生成一個(gè)i,所以每個(gè)元素彈對(duì)應(yīng)的序號(hào)
2.用閉包做一個(gè)簡(jiǎn)單的catch工具
閉包中的數(shù)據(jù)况脆,被隱藏饭宾,不被外界訪問(wèn)
function creatCache(){
const data={}//閉包中的數(shù)據(jù),被隱藏格了,不被外界訪問(wèn)
return {
set:function(key,val){
data[key] = val
},
get:function(key){
return data[key]
}
}
}
const c = creatCache()
c.set('name','lolo')
console.log(c.get('name')) //lolo