2011-07-30 12 views

答えて

5

これは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

2番目の関数はready関数のtimedCount関数をラップしているため、グローバルスコープでは使用できません。固定

http://jsfiddle.net/x7xhA/2/

+0

詳しい説明がありません。 – Mrchief

関連する問題