javascript做用域(整合)

做用域的幾個概念:javascript

              一、JavaScript中的函數運行在它們被定義的做用域裏,而不是它們被執行的做用域裏.java

              二、全局變量擁有全局做用域,函數內聲明的變量只在函數體內有定義,做用域是局部性的。函數

              三、 在函數體內,局部變量的優先級高於全局變量。spa

               四、 定義全局變量的時候能夠不須要var進行聲明,定義局部變量的時候必須用var進行聲明 。(一般狀況下建議都用var聲明)3d

 

做用域容易遇到的幾個誤區:blog

               1:全局變量和局部變量做用域混淆。(新手誤區)ip

 

                           

                                  圖 1                                       圖 2作用域

                 

                    如圖1和圖2,當局部變量和全局變量重複時,局部變量優先級高於全局變量,圖1中checkscope()方法中對scope用var從新進行了聲明,所以改變和返回的是從新聲明的局部變量scope。而圖2中沒有從新聲明,所以checkscope()方法中改變和返回的是全局變量scope。io

                2:忽略變量提高的做用。console

                   

                                圖 3

                 

                   如圖3所示,第一次輸出的不是理想中的"global",反而是undefined;這是由於在javascript中局部變量在函數體內始終是有定義的,函數體內的變量聲明默認都提高到函數頂部,即checkscope()方法中實際執行順序是:

                         function checkscope() {

                                var scope;

                                console.log(scope);

                                scope = "local";

                                console.log(scope);

                         }

 

                   3:使用var聲明全局變量和不使用var聲明全局變量。

                    

                 

相關文章
相關標籤/搜索