请问一个作用域的问题

https://img4.mukewang.com/5c9dd1aa0001e0ee07190800.jpg

前端初学者,今天在这个作用域的问题里绕了很久。
这是我的这段代码,它的运行结果是里面的li元素背景直接变成黑色,好像onmouseover被覆盖掉一样。我找到了解决方案,是将for里面的hoverLi 和 leaveLi 用bind(lis[i])绑定一下,用this赋值属性,可是这样为什么就可以了呢,所以使我对作用域这块更加混乱了。请大神能帮忙提个醒,解答一下,感激不尽

ABOUTYOU
浏览 420回答 3
3回答

繁星淼淼

老兄!hoverLi是一个方法,方法后面加一对(),意思是执行这个方法!// 这样改下试试。function hoverLi(item) {  return function() {    item...  };}

撒科打诨

hoveLi()的item的作用域指hoveLi这个函数;此时this的指向已经改变;可以用闭包的方式((i){})(i)

万千封印

跟作用域没关系。加了括号就叫函数的调用,直接执行了,bind会返回函数的某种拷贝。不想用bind,你这样也是可以的onmouseout = (function (i) {    // 直接执行,返回函数    return function () {        // mouseover时执行这个function        // 同时leaveLi()本身是函数调用,也会执行        // i为最外层匿名函数执行时传入,这儿才是作用域        // 有点绕        leaveLi(list[i])    }})(i)// 有点绕
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript