鼠标悬停功能在从匿名函数调用时失去范围

时间:2012-08-20 14:02:34

标签: javascript jquery jquery-plugins tooltip

我正在查看jQuery ToolTip插件的代码(以下简称Tooltip),并注意到我不完全理解的行为。

工具提示绑定鼠标悬停功能,如下所示:

.mouseover(save)

以这种方式调用时,this变量为HtmlDivElement

我尝试将mouseover更改为:

.mouseover(function(e){save(event)})

因为我正在寻找MouseEvent。但是,现在this变量为Window

通过使用以下代码行,我找到了另一种方法来获取HtmlDivElement

.mouseover(function(e){save(this, event)})

并使用this作为函数内this的替换。

我的问题是 - 为什么save函数在鼠标悬停绑定中的匿名函数内被调用时会失去它的范围?

1 个答案:

答案 0 :(得分:1)

this的值在每次函数调用时建立。当您的匿名函数调用" save"函数,它没有做任何事情来确定this应该是什么,所以它是默认值:全局对象("窗口")。

你可以这样做:

.mouseover(function(e){ save.call(this, e); })

使this获取您需要的值。处理程序中的this值将由框架排列,因此使用.call()您将其传递给" save"功能

重复:在JavaScript中,this不是由代码的静态结构决定的。相反,它取决于每个函数调用的情况。这意味着对于任何函数,无论它如何声明,this的值都可能是任何给定函数调用的完全意外。