js的作用域問題及簡單練習

                       js的作用域問題

一、作用域:
       在js中的作用:讀、寫
       1、js代碼在瀏覽器中的實現過程
            1) "找一些東西":關鍵字 如 var  function  參數
               a = 未定義 
               所有的變量,在正式運行代碼之前,都提前賦了一個值:未定義
               fn1 = function fn1(){alert(2);}
               所有的函數,在正式運行代碼之前,都是整個函數塊
               js的預解析
               遇到重用名時:只留一個
               變量和函數重名時,就只留下函數,與代碼出現的前後順序無關
               函數與函數重名時,則留下後出現的那個函數,與代碼出現的前後順序有關
             2) 逐行解讀代碼:
               表達式:= + - * % ++ -- ! 參數...
               表達式可以修改預解析的值!包括函數
         2、 js的全局變量與局部變量
            1) script 可以在頁面中有多個,是全局變量,全局函數
               遵循自上而下的規則
            2)函數內的變量是局部變量
               函數調用時,內部的變量與外部的變量互不影響
               遵循由裏而外的規則(利用作用域鏈)當函數內部沒有變量時,則會在函數的                外部找變量進行賦值等操作 ,在函數中進行表達式賦值時,可以將局部變量                  變爲全局變量
         3、典型代碼實例:
             1)代碼如下:
               alert(a);   //返回值function a(){ alert(4);
                //此時js預解析庫裏存放的就只有 a = function a(){ alert(4);
                var a = 1;  //表達式將a的值進行修改 改寫爲1
                alert(a);   //1
                function a(){alert(2);}
                alert(a);   //2
                var a = 3;  //表達式將a的值進行修改 改寫爲3
                alert(a);   //3
                function a(){ alert(4);}
                alert(a);   //3
                //此時js預解析庫裏存放的就只有a = 3
                                2)代碼如下:
               var a = 1;
               function fn1(){
                 alert(a);//undefined
                 var a = 2;
               }
               fn1();
               alert(a);//1

               var a = 1;
               function fn1(){
                  alert(a);//1
                  a = 2;
               }
               fn1();
               alert(a);//2
               
           var a = 1;
           function fn1(a){
            alert(a);  //undefined
            var a = 2;
           }
           fn1();
           alert(a);  //1
           
           var a = 1;
           function fn1(a){  //傳入參數var a = 1
            alert(a);  //1
            var a = 2;
           }
           fn1(a);
           alert(a);  //1 函數內的變量改變不會影響外部的改變 


注意:此文章中文字部分紅色爲重點部分,顏色越深越重點,代碼部分,紅色爲需要注意的部分,需要多加理解的部分。 
                                     
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章