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 在我的第二个脚本中似乎没有被识别,即使我在第一个脚本中明确定义了它,就像一个全局变量。

http://jsfiddle.net/tYErg/

4

6 回答 6

3

问题是 jQuery 函数中“var global_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

您不能在同一范围内使用来自不同范围的两个具有相同名称的不同变量。因此,当您global_var使用var关键字声明本地时,您的全局变得不可访问。

如果您需要创建一个与全局同名的局部变量,您可以使用如下闭包:

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

You are having this problem because you are declaring a local variable with the same name as your global variable, therefore the global variable is not visible any more. You can still access it by explicitly specifying the scope:

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 回答
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 回答