让我从这里开始.在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)时会出现什么问题?可能会发生一些破坏或者这是正确的行为吗?
setTimeout并且setInterval打破范围,因此在找到它时无法找到testMessage它(因为该函数的作用域是您传递给的匿名函数ready).浏览器表现正常.
这是你永远不应该使用字符串格式的原因之一......或者尝试向可怕的W3Schools学习.