2

いくつかの方法で更新しようとした定義済みのグローバル変数がありますが、機能しません

<script>
var test = 4;

 function dostuff() {


...

test=7;
or
window.test=7;
or
declare it here without the var = 7

...

}
</script>

じゃあ後で...

<td><script type="text/javascript">document.write(test);</script></td>

出力: 4!

何か助けはありますか?7と言うように手伝ってください!

ありがとう


dostuff() はこのように呼び出されます。

$(document).ready(function(){
    dostuff();
});

通常どおり呼び出すと、グローバル変数は正しく更新されますが、このプログラムの他の部分が壊れます。この $(document).ready(function()? 内からグローバル変数を更新するヒントはありますか?

ありがとう!

4

3 に答える 3

2

どこで関数を呼び出しているのかわかりませんが、変数をページに対してグローバルにしdostuff()たい場合は、考慮する必要があることが 1 つあります。test次に、このように宣言する必要があります。

//this one is preferd
test = 4;

また

window.test = 4;

これは機能するはずです。呼び出していることを確認してくださいdostuff()

編集:関数呼び出しの問題を解決する

したがって、ここに問題の概要を含む完全なソリューションがあります。

問題: (これは DOM のロード後に呼び出されました)doStuff()イベントを呼び出しており、DOMのロード時に変数の値を出力していますdocument.ready()

DOM で値を出力する前に呼び出されることはないため、古い値が表示されます。doStuff()

解決策:目的の出力を得るには 2 つの方法があります。

  1. doStuff()前に電話するロードを開始します(宣言の直後)
  2. 計算を行い、結果に応じて値を Print に返す関数を作成します。

解決策 1:

 <!DOCTYPE html>
    <html>
    <head>
    <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
      <script>
//Should be before Body tag
       test = 4;
//Declaring function
    function doStuff()
    {
      
      test = 8;
      
    }
    //Calling right after declarion 
    doStuff();
      </script>
    <meta charset=utf-8 />
    <title>JS Bin</title>
    </head>
    <body>
/*Here value is updated and ready to print any any where in the DOM*/
      <h1><script type="text/javascript">
      
        document.write(test);</script></h1>
    </body>
    </html>

ソリューション 1へのライブ URL

解決策 2:

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
  <script>
    /*Should be before Body tag*/
   test = 4;
    
function doStuff()
{
  /*Changing value and returing it.*/
  test = 8;
  return test;
  
}

  </script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
  <h1><script type="text/javascript">
    /*Calling function and printing returned value*/
    document.write(doStuff());</script></h1>
</body>
</html>

ソリューション 2へのライブ URL

これが役立つことを願って、他に何かあれば教えてください。

于 2013-02-06T14:20:20.933 に答える
1

どうやら、どこでも関数を呼び出していませんdostuff():)

于 2013-02-06T14:08:53.000 に答える
0

ヘッド タグ スクリプトは実際に関数を実行するのではなく、関数を定義するだけです。ドキュメントのどこかからの関数呼び出しで関数を実行する必要があります。この関数呼び出しは、ページの onload イベントにアタッチして、ページが読み込まれたときに自動的に実行されるようにするか、onclick などの他のイベントにアタッチして、後でトリガーできるようにすることができます。

あなたが行った方法でグローバル変数を宣言すると、説明力がなくなります。グローバル変数が宣言されると、ウィンドウ オブジェクトにアタッチされます。したがって、宣言するときは、次のように宣言します。

var window.varName = value;

まったく同じことを行いますが、実際に何が起こっているかを明示的に表現するのに役立ちます。これは、ほとんどの場合、別の方法よりも優れています.

于 2013-02-06T14:23:59.460 に答える