0

基本的に、グローバル変数が javascript/JQuery 環境でどのように機能するかを知りたいです。私が最もよく知っているのは、Java ベースであると言われているプロセッシングと呼ばれる言語です。javascript と JQuery の変数が処理中の変数のように動作することを期待していましたが、期待どおりに機能せず、一生頭を悩ませることはできません。

私の混乱を説明するために、非常に簡単な例を作成しました。

 var what="";

 $(document).ready(function(){
      $("p").click(function () {
           what="p";
           });
      if(what=="p"){
            alert(what);
           }//end if
 });//end doc ready

'what' 変数はグローバルであり、段落をクリックして変更されるため、if ステートメントは 'what'=='p' かどうかを継続的にチェックし、アラートをトリガーする必要があるため、処理中にこれが機能します。しかし、それは起こりません-「what」は、グローバル変数であっても、クリック関数内でのみ更新されるように見えるため、ifステートメントになると、「what」は「p」ではなく「」に等しくなります.

誰かがなぜこれが起こるのか説明できれば、私はとても感謝しています!

4

2 に答える 2

4

このifステートメントは、DOM の準備が整ったときに 1 回だけ実行されます。継続して実行されていません。クリック ハンドラー中に実行する場合は、次のコードを使用します。

 var what="";

 $(document).ready(function(){
    $("p").click(function () {
       what="p";
       if(what=="p"){
           alert(what);
       }//end if
    });
});//end doc ready
于 2012-08-27T04:00:29.350 に答える
0

if ステートメントは、'what'=='p' かどうかを継続的にチェックし、アラートをトリガーする必要があります。

なんで?どのコードもその機能を生成しません。それを実現したい場合は、次を使用できますsetInterval()

setInterval(function() {
    if(what=="p") { 
        alert("what");
    }
}, 500); // executes function every 500 milliseconds

しかし、それは起こることではありません.グローバル変数であるにもかかわらず、「何」はクリック関数内でのみ更新されるようです.

いいえ、what変数はグローバルに更新されています。機能について誤った仮定をしたため、気付かないだけですif(一度しか呼び出されていません)。

于 2012-08-27T04:00:19.027 に答える