なぜ私にはエラーがありますか未知のReferenceError:helloは定義されていません?ここで未知のReferenceError:helloが定義されていません
function hello() {
console.log('hello()');
setTimeout("hello()", 1000);
}
setTimeout("hello()", 1000);
はjsfiddleです:http://jsfiddle.net/s9vLk/
なぜ私にはエラーがありますか未知のReferenceError:helloは定義されていません?ここで未知のReferenceError:helloが定義されていません
function hello() {
console.log('hello()');
setTimeout("hello()", 1000);
}
setTimeout("hello()", 1000);
はjsfiddleです:http://jsfiddle.net/s9vLk/
問題は、あなたはそれがで動作していると思うので、あなたは、文字列内のコードが効果的にeval
EDになることを意味するsetTimeout()
に文字列を渡していることにあるとし、したがって、hello()
関数が見つかりません。
左のjsfiddleオプションを "onload"から "no wrap"に変更すると、関数はonloadハンドラの中にネストされているのではなくグローバルになりますが、より良いオプションは関数を渡すことですsetTimeout()
への参照:
function hello() {
console.log('hello()');
setTimeout(hello, 1000);
}
setTimeout(hello, 1000);
(注:hello
後なし括弧)
evalされた文字列と範囲についての最も詳細な回答:-) – Matthew
関数名を文字列として参照する必要はありません。
まだfunction hello() {
console.log('hello');
setTimeout(hello, 1000);
}
setTimeout(hello, 1000);
またはそれ以上
setInterval(function() {
console.log('hello');
}, 1000);
あなたのデモ内のJavaScriptコードは、'load'
イベントハンドラ( "オンロード" が選択されているオプション)内で実行されます。したがって、関数hello
はグローバル関数ではありません。オプションは「ラップ(本文)なし」または「ラップなし(ヘッド)」に設定する必要があります。つまり、JavaScriptコードはグローバルコードになります。
ライブデモ:スコープで実行されていないhttp://jsfiddle.net/s9vLk/1/
ポストこのサイト上の代わりに、別のサイト上であなたのコード。リンクは補足的でなければなりません。 –