为了账号安全,请及时绑定邮箱和手机立即绑定

请问一个作用域的问题

请问一个作用域的问题

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

3 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

老兄!

hoverLi是一个方法,方法后面加一对(),意思是执行这个方法!


// 这样改下试试。

function hoverLi(item) {

  return function() {

    item...

  };

}


查看完整回答
反对 回复 2019-03-29
?
撒科打诨

TA贡献1934条经验 获得超2个赞

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

查看完整回答
反对 回复 2019-03-29
?
万千封印

TA贡献1891条经验 获得超3个赞

跟作用域没关系。

加了括号就叫函数的调用,直接执行了,bind会返回函数的某种拷贝。

不想用bind,你这样也是可以的


onmouseout = (function (i) {

    // 直接执行,返回函数

    return function () {

        // mouseover时执行这个function

        // 同时leaveLi()本身是函数调用,也会执行

        // i为最外层匿名函数执行时传入,这儿才是作用域

        // 有点绕

        leaveLi(list[i])

    }}

)(i)

// 有点绕


查看完整回答
反对 回复 2019-03-29
  • 3 回答
  • 0 关注
  • 419 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信