2012-07-18 189 views
-6

這是對Question的擴展。我曾嘗試下面的代碼來理解JavaScript作用域的全局函數裏面具有全局範圍的JavaScript變量

var
var a = function(){ 
    var aa = 10; 
    var x = 13;    
    b = function(){ c = function(){ alert(aa); }; };  
}; 
a(); 
b(); 
c(); 
alert(typeof x);​ // Undefined 
alert(x);​ // Returned me 13. 

我查詢我已經聲明的變量。根據我的理解,x應該是本地的。但它不是那樣行事。有人請清除我的疑問...請檢查this小提琴。

+3

'x'的作用域被分配給'a'的函數。最後一個'alert'從來沒有真正出現過 - 你會得到一個SyntaxError,因爲'x'沒有被定義。 – 2012-07-18 13:45:30

+1

有沒有辦法你會得到13,你會得到'x沒有定義',因爲x的範圍在a中。也許你已經在全球範圍內的某個地方設置了x = 13。 – Angel 2012-07-18 13:46:28

+0

http://jsfiddle.net/MYbKT/由於@JamesAllardice說 – scottheckel 2012-07-18 13:46:32

回答

3

將發生以下情況:

警報彈出,顯示的aa值= 10

警報彈出,說undefined因爲你正試圖從全球範圍內訪問變量x,但是x僅在函數a的範圍內定義。

控制檯出現錯誤,ReferenceError: x is not defined

因此,如你所想,x確實是私人的,你不能全局訪問它。

你可能搞砸了,給你錯誤的結果。

可能發生的情況是,您忘記了x前面的var,它突然使其成爲全局對象的成員,而不是被限制在函數範圍內。在這種情況下,最後一次警報會給你13.但是警報(typeof x)會給你"number"