任何想法为什么我有错误未捕获ReferenceError:你好没有定义?未捕获ReferenceError:你好没有定义
function hello() {
console.log('hello()');
setTimeout("hello()", 1000);
}
setTimeout("hello()", 1000);
这里是一个的jsfiddle:http://jsfiddle.net/s9vLk/
任何想法为什么我有错误未捕获ReferenceError:你好没有定义?未捕获ReferenceError:你好没有定义
function hello() {
console.log('hello()');
setTimeout("hello()", 1000);
}
setTimeout("hello()", 1000);
这里是一个的jsfiddle:http://jsfiddle.net/s9vLk/
的问题是要传递字符串setTimeout()
这意味着字符串中的代码将有效地eval
ED,因此未在范围内运行,你认为它的运行并因此找不到hello()
函数。
如果将左侧的jsfiddle选项从“onload”更改为“no wrap”,则它的工作原样,因为该函数将是全局的,而不是嵌套在onload处理程序中,但更好的选择是传递函数参考setTimeout()
:
function hello() {
console.log('hello()');
setTimeout(hello, 1000);
}
setTimeout(hello, 1000);
(注:hello
后没有括号)
有关被评估的字符串和范围的最佳答案:-) – Matthew 2012-02-28 02:07:02
您不需要(也不应该)需要将您的函数名称作为字符串引用。
function hello() {
console.log('hello');
setTimeout(hello, 1000);
}
setTimeout(hello, 1000);
或者更好的
setInterval(function() {
console.log('hello');
}, 1000);
在您的演示中的JavaScript代码'load'
事件处理程序中运行(选择该选项 “的onLoad”)。因此,函数hello
不是全局函数。您必须将选项设置为“无包装(正文)”或“无包装(正文)”。这样,您的JavaScript代码将成为全局代码。
发布您的代码在这个网站,而不是在不同的网站。链接应该是补充的。 – 2012-02-28 02:04:04