2012-07-18 152 views
1

與MooTools的書臨的JavaScript我發現下面的線功能範圍在JavaScript

The scoping rules for function expressions are a bit different from function 
declarations because they depend on variable scoping. Remember that in 
JavaScript, the var keyword defines a variable to be scoped locally, and 
omitting the keyword creates a global variable instead:  

按我的理解,我已經寫了下面的代碼,並試圖檢查這個

var a = function(){ 
    b = function(){ c = function(){ alert("b"); }; }; 
}; 
alert(typeof a); // Returned me 'function' 
alert(typeof b); // Returned me 'undefined' 
alert(typeof c); // Returned me 'undefined' 

我也試過下面

var a = function(){ 
    var b = function(){ c = function(){ alert("b"); }; }; 
}; 
alert(typeof a); // Returned me 'function' 
alert(typeof b); // Returned me 'undefined' 
alert(typeof c); // Returned me 'undefined'​​ 

能否請您解釋一下這個讓我更好地理解。根據我在第一塊代碼b和c中的理解應該是全局變量。但是在這種情況下不會發生這種情況。即使我試圖在警報之前調用a() ... Here是小提琴。請幫助我更好地瞭解範圍。

回答

6

按我的代碼B和C的第一塊理解應該是全局變量

他們,但直到a叫他們不會分配給它們的值(直到b是在c的情況下稱爲)。

這裏是小提琴

該代碼是不同的。您有var b,這使得b成爲局部變量而不是全局變量。


var a = function(){ 
    b = function(){ c = function(){ alert("b"); }; }; 
}; 
a(); 
b(); 
alert(typeof a); 
alert(typeof b); 
alert(typeof c); 
+0

請看小提琴http://jsfiddle.net/HJ4vK/5/沒有直接的聯繫。在這種情況下。 'b'也成爲全局變量吧? – Exception 2012-07-18 11:49:57

+1

不,由於您聲明瞭'var b',它對於包含塊是本地的,在這種情況下,它是分配給'var a'的函數。 – 2012-07-18 12:02:13

+1

JavaScript沒有塊範圍。 'var'使事物對包含它們的最接近的函數是局部的(它仍然是分配給'a'的函數)。 – Quentin 2012-07-18 12:04:03

-1

低於谷歌的關鍵詞,它是要掌握確定範圍和其他JavaScript模式技術的好地方。它是一系列包含12個部分的文章。還有的網站,所以你需要搜索的其他文章使用編號

 
    search for 
    
    elegant code basic javascript part 1 
    elegant code basic javascript part 2 
    etc...