鍍金池/ 問答/HTML/ 請(qǐng)問一個(gè)作用域的問題

請(qǐng)問一個(gè)作用域的問題

clipboard.png
前端初學(xué)者,今天在這個(gè)作用域的問題里繞了很久。
這是我的這段代碼,它的運(yùn)行結(jié)果是里面的li元素背景直接變成黑色,好像onmouseover被覆蓋掉一樣。我找到了解決方案,是將for里面的hoverLi 和 leaveLi 用bind(lis[i])綁定一下,用this賦值屬性,可是這樣為什么就可以了呢,所以使我對(duì)作用域這塊更加混亂了。請(qǐng)大神能幫忙提個(gè)醒,解答一下,感激不盡

回答
編輯回答
溫衫

hoveLi()的item的作用域指hoveLi這個(gè)函數(shù);此時(shí)this的指向已經(jīng)改變;
可以用閉包的方式
((i){})(i)

2018年2月7日 02:00
編輯回答
陌南塵

老兄!
hoverLi是一個(gè)方法,方法后面加一對(duì)(),意思是執(zhí)行這個(gè)方法!

// 這樣改下試試。
function hoverLi(item) {
  return function() {
    item...
  };
}
2018年6月6日 00:35
編輯回答
兔囡囡

跟作用域沒關(guān)系。
加了括號(hào)就叫函數(shù)的調(diào)用,直接執(zhí)行了,bind會(huì)返回函數(shù)的某種拷貝。
不想用bind,你這樣也是可以的

onmouseout = (function (i) {
    // 直接執(zhí)行,返回函數(shù)
    return function () {
        // mouseover時(shí)執(zhí)行這個(gè)function
        // 同時(shí)leaveLi()本身是函數(shù)調(diào)用,也會(huì)執(zhí)行
        // i為最外層匿名函數(shù)執(zhí)行時(shí)傳入,這兒才是作用域
        // 有點(diǎn)繞
        leaveLi(list[i])
    }}
)(i)
// 有點(diǎn)繞
2017年12月15日 18:47