2012-06-22 108 views
1

是这样的:变量在JavaScript中无法识别

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

+0

不正确的,它提醒2 – Alex

+0

http://jsfiddle.net/tYErg/2/ – 2012-06-22 16:28:34

回答

3

的问题是在 “VAR global_var” 你的jQuery功能的 “变种”。这是在你的函数内创建一个不同的“global_var”变量,而不是使用真正的全局变量。放下它,你的代码按预期工作。

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/

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/

1

试试这个

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

不能使用两个不同的变量来自不同的同名范围在同一范围内。因此,当您用var关键字声明本地global_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); 
}); 
1

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

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