1

こんな感じです:

<script>
  var global_var = {foo:1};
</script>

<script src="myscript.js"></script>

myscript.jsで私は持っています

jQuery(document).ready(function($){    
  var global_var = typeof global_var == 'undefined' ? {foo:2} : global_var;
  console.log(global_var);    
});

しかし、global_varは、グローバル変数のように最初のスクリプトで明確に定義したにもかかわらず、2番目のスクリプトでは認識されないようです。

http://jsfiddle.net/tYErg/

4

6 に答える 6

3

問題は、jQuery関数内の「varglobal_var」の「var」です。これは、真のグローバルを使用する代わりに、関数内に別の「global_var」変数を作成しています。これをドロップすると、コードは期待どおりに機能します。

于 2012-06-22T16:26:45.040 に答える
2

これglobal_varは、現在のスコープで別のスコープを宣言したためです。を削除するvarか、変数名を変更してください。

例えば

global_var = typeof global_var == 'undefined' ? {foo:2} : global_var;
var other_var = typeof global_var == 'undefined' ? {foo:2} : global_var;

http://jsfiddle.net/8Mptw/

于 2012-06-22T16:27:00.697 に答える
2

同じスコープ内の異なるスコープからの同じ名前の2つの異なる変数を使用することはできません。したがってglobal_varvarキーワードを使用してローカルを宣言すると、グローバルにアクセスできなくなります。

グローバルと同じ名前のローカル変数を作成する必要がある場合は、次のようなクロージャを使用できます。

jQuery(document).ready(function($){
    (function(global_var){
        // global_var is a local copy of global_var from the outer scope
        global_var = typeof global_var == 'undefined' ? {foo:2} : global_var;
        console.log(global_var);
    })(global_var);    
});

windowグローバルであることがわかっている場合は、オブジェクトのプロパティとして参照することもできます。

jQuery(document).ready(function($){
    var global_var = typeof window.global_var == 'undefined' ? 
      {foo:2} : window.global_var;
    console.log(global_var);
});

最後に、ローカルコピーが不要で、外部スコープから変数にアクセスするだけの場合は、キーワードを使用しないでくださいvar。そのキーワードの目的は、新しい変数を宣言することです。

jQuery(document).ready(function($){
    global_var = typeof global_var == 'undefined' ? {foo:2} : global_var;
    console.log(global_var);
});
于 2012-06-22T16:28:21.333 に答える
1

varグローバルスコープでそれを作るための重要な作業なしでそれを定義してみてください

<script>
     var global_var = {foo:1};
    </script>   

<script>    
      jQuery(document).ready(function($){   
      global_var = typeof global_var === 'undefined' ? {foo:2} : global_var;    
      alert(global_var.foo); // should be 1    
    });        
</script>   

http://jsfiddle.net/tYErg/3/

于 2012-06-22T16:26:55.953 に答える
1

これを試して

jQuery(document).ready(function($){    
 global_var = typeof global_var == 'undefined' ? {foo:2} : global_var;
  console.log(global_var);    
});
于 2012-06-22T16:27:56.263 に答える
1

この問題が発生しているのは、グローバル変数と同じ名前のローカル変数を宣言しているため、グローバル変数が表示されなくなったためです。スコープを明示的に指定することで、引き続きアクセスできます。

jQuery(document).ready(function($){    
  var global_var = typeof window.global_var == 'undefined' ? {foo:2} : window.global_var;
  console.log(global_var);    
});
于 2012-06-22T16:31:46.140 に答える