我知道为什么会出现错误未捕获的ReferenceError:hello未定义?
function hello() {
console.log('hello ()');
setTimeout("hello ()", 1000);
}
setTimeout("hello()", 1000);
这是一个jsfiddle: http://jsfiddle.net/s9vLk/
答案 0 :(得分:4)
演示中的JavaScript代码在'load'
事件处理程序中运行(选择“onLoad”选项)。因此,函数hello
不是全局函数。您必须将选项设置为“no wrap(body)”或“no wrap(head)”。这样,您的JavaScript代码就是全局代码。
答案 1 :(得分:2)
问题是你将字符串传递给setTimeout()
,这意味着字符串中的代码实际上会被eval
编辑,因此不会在您认为正在运行的范围内运行,因此{找不到{1}}功能。
如果你将左边的jsfiddle选项从“onload”更改为“no wrap”,它将按原样运行,因为那时函数将是全局的而不是嵌套在onload处理程序中,但更好的选择是传递函数引用到hello()
:
setTimeout()
(注意:function hello() {
console.log('hello ()');
setTimeout(hello, 1000);
}
setTimeout(hello, 1000);
后没有括号。)
答案 2 :(得分:0)
hello
与()
之间有空格。
你真的不应该将参数作为字符串传递给setTimeout
。
答案 3 :(得分:0)
您不需要(也不应该)将您的函数名称引用为字符串。
function hello() {
console.log('hello');
setTimeout(hello, 1000);
}
setTimeout(hello, 1000);
或者更好
setInterval(function() {
console.log('hello');
}, 1000);