为什么下面的JavaScript不能正常工作?
$(document).ready(function(){ function sayHello(){alert("Hello");} setInterval('sayHello()', 1000); });
ubof19bj1#
更改您代码!
$(document).ready(function(){ function sayHello(){alert("Hello");} setInterval(sayHello, 1000); });
应该可以^_^小提琴:http://jsfiddle.net/maniator/hmRpS/
olqngx592#
setInterval(sayHello, 1000); .
p4rjhz4m3#
我的第一眼是这样的:
setInterval(sayHello, 1000);
pdsfdshx4#
因为该函数是ready函数的局部函数。让它全球化,它就会起作用:
ready
function sayHello() { alert("Hello"); } $(document).ready(function(){ setInterval(function() { sayHello(); }, 1000); });
pvcm50d15#
原始代码无法运行的原因是,因为您要向setInterval传递一个字符串,它必须执行eval()才能执行代码。然而,当setInterval准备好调用代码时,函数已经超出了作用域(因为它只在ready事件处理程序中定义),因此什么也没有发生。
htrmnn0y6#
简短的深度解释。setInterval( STRING , NUMBER )使用eval来解释字符串,并且这个eval在全局作用域中执行,而不是在函数作用域中执行,因为超时的性质使它脱离了任何函数作用域。sayHello驻留在函数内部,因此不存在于全局范围中。因此,在给定的示例中,setInterval( STRING , NUMBER )将引发缺少对象错误。setInterval( FUNCTION , NUMBER )确保超时使用引用/指针,并避免需要执行全局eval。
setInterval( STRING , NUMBER )
eval
sayHello
setInterval( FUNCTION , NUMBER )
6条答案
按热度按时间ubof19bj1#
更改您代码!
应该可以^_^
小提琴:http://jsfiddle.net/maniator/hmRpS/
olqngx592#
p4rjhz4m3#
我的第一眼是这样的:
pdsfdshx4#
因为该函数是
ready
函数的局部函数。让它全球化,它就会起作用:
pvcm50d15#
原始代码无法运行的原因是,因为您要向setInterval传递一个字符串,它必须执行eval()才能执行代码。然而,当setInterval准备好调用代码时,函数已经超出了作用域(因为它只在ready事件处理程序中定义),因此什么也没有发生。
htrmnn0y6#
简短的深度解释。
setInterval( STRING , NUMBER )
使用eval
来解释字符串,并且这个eval
在全局作用域中执行,而不是在函数作用域中执行,因为超时的性质使它脱离了任何函数作用域。sayHello
驻留在函数内部,因此不存在于全局范围中。因此,在给定的示例中,
setInterval( STRING , NUMBER )
将引发缺少对象错误。setInterval( FUNCTION , NUMBER )
确保超时使用引用/指针,并避免需要执行全局eval
。