为什么setInterval没有执行之前定义的函数呢?

时间:2011-03-30 20:58:52

标签: javascript jquery javascript-events

为什么以下JavaScript没有按预期运行?

$(document).ready(function(){
  function sayHello(){alert("Hello");}
  setInterval('sayHello()', 1000);
});

6 个答案:

答案 0 :(得分:5)

更改你的密码!

$(document).ready(function(){
  function sayHello(){alert("Hello");}
  setInterval(sayHello, 1000);
});

应该有效^ _ ^

小提琴:http://jsfiddle.net/maniator/hmRpS/

答案 1 :(得分:1)

setInterval(sayHello, 1000);  .

答案 2 :(得分:1)

我的第一眼就是:

setInterval(sayHello, 1000);

答案 3 :(得分:1)

因为该函数是ready函数的本地函数。

让它全球化,它会起作用:

function sayHello() {
   alert("Hello");
}

$(document).ready(function(){
  setInterval(function() {
      sayHello();
   }, 1000);
});

答案 4 :(得分:1)

原始代码不起作用的原因是因为您将字符串传递给setInterval,所以它必须eval()来执行代码。但是,当setInterval准备好调用代码时,该函数已超出范围(因为它只在ready事件处理程序中定义),因此没有任何反应。

答案 5 :(得分:0)

简短的解释。

setInterval( STRING , NUMBER )使用eval来解释字符串,这个eval在全局范围而不是函数范围内执行,因为超时的性质使它从任何函数中删除范围。

sayHello驻留在函数内部,因此不存在于全局范围内。

错误setInterval( STRING , NUMBER )将在给定的示例中抛出一个丢失的对象错误。

setInterval( FUNCTION , NUMBER )确保超时使用引用/指针,并避免需要执行全局eval