前端初学者,今天在这个作用域的问题里绕了很久。这是我的这段代码,它的运行结果是里面的li元素背景直接变成黑色,好像onmouseover被覆盖掉一样。我找到了解决方案,是将for里面的hoverLi 和 leaveLi 用bind(lis[i])绑定一下,用this赋值属性,可是这样为什么就可以了呢,所以使我对作用域这块更加混乱了。请大神能帮忙提个醒,解答一下,感激不尽
3 回答
繁星淼淼
TA贡献1775条经验 获得超11个赞
老兄!
hoverLi是一个方法,方法后面加一对(),意思是执行这个方法!
// 这样改下试试。
function hoverLi(item) {
return function() {
item...
};
}
万千封印
TA贡献1891条经验 获得超3个赞
跟作用域没关系。
加了括号就叫函数的调用,直接执行了,bind会返回函数的某种拷贝。
不想用bind,你这样也是可以的
onmouseout = (function (i) {
// 直接执行,返回函数
return function () {
// mouseover时执行这个function
// 同时leaveLi()本身是函数调用,也会执行
// i为最外层匿名函数执行时传入,这儿才是作用域
// 有点绕
leaveLi(list[i])
}}
)(i)
// 有点绕
添加回答
举报
0/150
提交
取消