Js———變量及作用域

一、變量包含兩種不同數據類型的值:基本類型值、引用類型值;
    1 .基本類型值:1. 簡單的數據段,被保存在棧內存中;                
  2. 按值訪問;
                  3. 不能給基本類型的值添加屬性;
                  4. 從一個變量向另一個變量複製值時,會創建這個值的副本,兩個變量不相互影響 ;
    
    2. 引用類型值:  1. 值是保存在內存中的對象,保存在堆內存中;
                   2. 當複製保存着對象的變量是,操作的是對象的引用;
                   3. 當爲對象添加屬性時,操作的是實際的對象;
                   4. 可以添加屬性和方法,也可以改變和刪除其屬性和方法;
                       (delete 對象. 屬性 / 方法);
                        銷燬對象:對象=null;
                   5. 從一個變量向另一個變量複製值時,複製的是指針,兩個變量指向同一個對象;
 
     3. 傳遞參數: 1. 函數的參數都是按值傳遞的;
                   2. 傳遞基本類型的值時,值被複制給局部變量(命名參數);
                   3. 傳遞引用類型的值時,會把值的內存中的地址複製給一個局部變量,這個局部變量的變化會反映在函數外部;
                   4. 可以把函數的參數看成局部變量;


二、執行環境和作用域
  
1. 所有變量都存在於一個執行環境(作用域)當中;
2. 當代碼在一個環境中執行時,會創建變量對象的一個作用域鏈;
3. 執行環境中的代碼執行完,該環境被銷燬,其中變量和函數定義也被銷燬;
4. 全局執行環境、函數執行環境;
5. Web瀏覽器中,window 是全局執行環境;
6. 函數的局部環境不僅有權訪問函數作用域中的變量,也有權訪問父環境、全局環境;
7. 全局環境、外部環境不能訪問局部環境中的任何數據;
8. 函數執行環境中的變量對象是其活動對象,即arguments對象(這個對象在全局變量中不存在);

      延長作用域鏈:
1. try-catch 語句的catch塊 :創建一個新的變量對象;
2. with語句: 會將指定的對象添加到作用域鏈中;
 
      沒有塊級作用域:
1. 例:由for循環創建的變量i,在for循環結束後,也存在與循環外部的環境中;
2. var 聲明的變量:局部變量; 沒有var 則爲全局變量;
3. 查詢標識符:從作用域鏈的前端開始,向上查詢,局部環境中找到該標識符,停止搜索;
       
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章