2012-06-22 146 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);  
});