タイマーを作成しようとしています。問題は何であるのjavascript http://jsfiddle.net/x7xhA/1/ インラインJavaScriptとインラインJavaScriptの動作が異なります
- インラインjavascriptのhttp://jsfiddle.net/x7xhA/
- 非インライン:(最初のものは、ない作品秒)二つの状況を比較してください?
タイマーを作成しようとしています。問題は何であるのjavascript http://jsfiddle.net/x7xhA/1/ インラインJavaScriptとインラインJavaScriptの動作が異なります
これはjsFiddleの 'JavaScriptのセクション' のユーザーと一般的に発生する問題です。今
<script type='text/javascript'>
//<![CDATA[
$(window).load(function(){
var seconds = 0;
function timedCount() {
$("#txt").val(seconds);
seconds += 1;
setTimeout("timedCount()",1000);
}
});
//]]>
</script>
、
timedCount
ではありません。あなたが見る、のJavaScriptセクション "に入れてのコードは、2番目の例では、実際の出力結果がこれですので、
load
ハンドラとして使用する機能の中に包まれ
load
ハンドラのスコープで利用できるようになり、コードの文字列で
setTimeout
を使用すると、これはグローバルスコープから評価されます。この問題を解決するために
つの方法は次のとおりです。
変更setTimeout
コールこれは何、である
setTimeout(timedCount, 1000);
にsetTimeout
に実際の関数オブジェクトを渡します。グローバルスコープからコードの文字列を評価するのではなく、これは本質的にスコープとして関数を呼び出す機能を保持します。これは重要ではありません。関数をsetTimeout
に渡しています。
var seconds = 0;
function timedCount() {
$("#txt").val(seconds);
seconds += 1;
setTimeout(timedCount,1000);
}
setTimeout
はグローバルスコープからtimedCount();
を評価しようとしたときでtimedCount
機能があるので、それが成功したように、timedCount = function() { ... };
これを使用してtimedCount
グローバル関数は単に、timedCount
グローバルになり作りますグローバルスコープ。
var seconds = 0;
timedCount = function() {
$("#txt").val(seconds);
seconds += 1;
setTimeout("timedCount();",1000);
}
2番目の関数はready
関数のtimedCount
関数をラップしているため、グローバルスコープでは使用できません。固定
詳しい説明がありません。 – Mrchief