为什么以下JavaScript没有按预期运行?
$(document).ready(function(){
function sayHello(){alert("Hello");}
setInterval('sayHello()', 1000);
});
答案 0 :(得分:5)
更改你的密码!
$(document).ready(function(){
function sayHello(){alert("Hello");}
setInterval(sayHello, 1000);
});
应该有效^ _ ^
答案 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
。