关于javascript函数引用的问题

时间:2011-02-24 14:25:01

标签: javascript function reference scope

为什么不用这段代码:

<a href="#">Sample link</a>
<script>
    setTimeout($('a').hide, 2000)
</script>

像这样工作:

<a href="#">Sample link</a>
<script>
    setTimeout(function(){ $('a').hide(); }, 2000)
</script>

4 个答案:

答案 0 :(得分:3)

关键是this绑定到setTimeout调用中的全局对象。接下来是

setTimeout($('a').hide, 2000)

setTimeout(function(){ $('a').hide(); }, 2000)

会调用方法$('a').hide,但this的值不同(第一种情况为window,第二种情况为$('a')

Here根据您调用函数的方式提供有关this值的更多详细信息。

答案 1 :(得分:3)

表达式$('a').hide返回jQuery的标准hide函数,不提及$('a')
当您调用 $('a').hide()作为陈述时,$('a')将作为this参数传递给hide

但是,当您将hide函数传递给setTimeout时,它不会调用$('a')上的函数;所有setTimeout d函数都在window上调用。

答案 2 :(得分:2)

问题是this。在JavaScript中,它是在调用绑定this的函数时使用的点符号 - 所以在第一个示例中,您传递一个隐藏函数,它没有连接到任何特定的jQuery对象。 / p>

答案 3 :(得分:-2)

如果你想要你的代码行,你应该引用它:

setTimeout("$('a').hide()", 2000)
OR

请查看:http://www.w3schools.com/jsref/met_win_settimeout.asp