任何想法爲什麼我有錯誤未捕獲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