未捕获的ReferenceError:未定义hello

时间:2012-02-28 01:55:35

标签: javascript

我知道为什么会出现错误未捕获的ReferenceError:hello未定义

function hello() {
    console.log('hello ()');
    setTimeout("hello ()", 1000);
}
setTimeout("hello()", 1000);​

这是一个jsfiddle: http://jsfiddle.net/s9vLk/

4 个答案:

答案 0 :(得分:4)

演示中的JavaScript代码在'load'事件处理程序中运行(选择“onLoad”选项)。因此,函数hello不是全局函数。您必须将选项设置为“no wrap(body)”或“no wrap(head)”。这样,您的JavaScript代码就是全局代码。

现场演示: http://jsfiddle.net/s9vLk/1/

答案 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);