【问题标题】:question about javascript function references关于javascript函数引用的问题
【发布时间】:2011-02-24 14:25:00
【问题描述】:

为什么没有这段代码:

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

像这样工作:

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

【问题讨论】:

  • @SLaks @Andrea 两个很好的答案,但 IMO Andrea 在该链接方面处于领先地位,而且他的得分较低。希望我能同时打勾

标签: javascript function reference scope


【解决方案1】:

关键是this 绑定到 setTimeout 调用中的全局对象。由此可见

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

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

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

Here 根据您调用函数的方式,可以更详细地了解this 的值。

【讨论】:

    【解决方案2】:

    表达式$('a').hide 返回jQuery 的标准hide 函数,没有任何对$('a') 的引用。
    当您调用 $('a').hide() 作为语句时,$('a') 作为 this 参数传递给 hide

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        如果你想让你的代码行工作,你应该引用它:

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

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

        【讨论】:

        • 我假设这在后端使用 eval 或者...?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多