$(document).ready(function(){...})中的setInterval odd(buggy?)行为; 块

Joh*_*ogo 2 javascript jquery

让我从这里开始.在w3cshools.com - http://www.w3schools.com/jsref/met_win_setinterval.asp - 他们有一个片段演示了如何使用javascript setInterval函数(令人惊讶的是它有一个不匹配的</ form>但那就是这一点) .

我需要使用setInterval(),有时我喜欢引用一些"标准"主体来瞥见推荐的用法.在我的开发环境中,当我在jquery $(document).ready(function(){...})中使用它时,似乎有些东西会破坏setInterval()的行为/工作.块.

图1 - 工作:典型/传统<script>块

<script type="text/javascript">
    var refreshIntervalId;

    function testMessage() {
        window.alert("Hello");
    }
    refreshIntervalId = setInterval("testMessage()", 5000);
</script>
Run Code Online (Sandbox Code Playgroud)

图2 - 不工作: jQuery块

<script type="text/javascript">
    $(document).ready(function() {
        var refreshIntervalId;

        function testMessage() {
            window.alert("Hello");
        }
        refreshIntervalId = setInterval("testMessage()", 5000);
    });
</script>
Run Code Online (Sandbox Code Playgroud)

图3 - 工作: jQuery块 - 使用setInterval(testMessage,5000)而不是setInterval("testMessage()",5000)

<script type="text/javascript">
    $(document).ready(function() {
        var refreshIntervalId;

        function testMessage() {
            window.alert("Hello");
        }
        refreshIntervalId = setInterval(testMessage, 5000);
    });
</script>
Run Code Online (Sandbox Code Playgroud)

事实证明,如果我尝试将函数作为字符串从$(document).ready(function(){})传递出去; 块,我收到一个错误,表明该函数未定义.因此,我们不会让侧面跟踪的IE,Chrome和Firefox都报告错误:

IE:Microsoft JScript运行时错误:属性"testMessage"的值为null或未定义,而不是Function对象

Chrome:未捕获的ReferenceError:未定义testMessage(匿名函数)

Firefox:未定义testMessage.

我想知道的(如果可能的话)是,这可能是标准不一致的结果,或者当我尝试在jQuery块中使用setInterval("testMessage()",5000)时会出现什么问题?可能会发生一些破坏或者这是正确的行为吗?

Que*_*tin 5

setTimeout并且setInterval打破范围,因此在找到它时无法找到testMessage它(因为该函数的作用域是您传递给的匿名函数ready).浏览器表现正常.

这是你永远不应该使用字符串格式的原因之一......或者尝试向可怕的W3Schools学习.