一、變數包含兩種不同資料型別的值:基本型別值、引用型別值;
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.查詢識別符號:從作用域鏈的前端開始,向上查詢,區域性環境中找到該識別符號,停止搜尋;
JS變數作用域
先明確一點 討論作用域,討論的是非物件成員的變數。在函式以及自定義物件之外宣告的變數,具有全域性作用域 1.瀏覽器會建立乙個window物件,window的所有屬性,都具有全域性作用域 2.反過來,具有全域性作用域的變數,都是window的屬性 3.具有全域性作用域的變數,任何位置都可以訪問 通過上...
js 變數 作用域
一 基本型別與引用型別 針對引用型別值時,複製的只是乙個指標,複製操作結束後,兩個變數實際上將引用同乙個物件 如果是按引用傳遞的話,那麼p就會被自動修改為指向其name屬性為 greg 的新物件,但是由下圖分析可知,引數傳遞是按值傳遞 二 執行環境和作用域 var color blue functi...
JS作用域及變數的認識
js一直以來可謂是前端技術中一大難關,學也容易,但想學的有深度可謂是十年磨一劍,有點兒誇張了。總之,非一朝一夕之就,多研究研究,多問問為什麼,就ok。對於js入手並不是很長的發燒友來說,一些基礎還是有必要弄得紮實。js作用域,作用域的理解可以讓我們更好的去做到變數的公有和變數的私有化。主要就寫一些容...