来自全局范围的变量在javascript中无法识别

时间:2012-06-22 16:22:04

标签: javascript jquery

就是这样:

<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/

6 个答案:

答案 0 :(得分:3)

问题是jQuery函数中“var global_var”中的“var”。这是在您的函数中创建一个不同的“global_var”变量,而不是使用真正的全局变量。删除它,您的代码按预期工作。

答案 1 :(得分: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/

答案 2 :(得分: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);
});

答案 3 :(得分: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/

答案 4 :(得分:1)

试试这个

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

答案 5 :(得分:1)

您遇到此问题是因为您声明了一个与全局变量同名的局部变量,因此全局变量不再可见。您仍然可以通过显式指定范围来访问它:

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