摘要:基本類型和引用類型用操作符定義的變量將成為作用域中的局部變量。在向參數傳遞基本類型的值時,被傳遞的值會被復制給一個局部變量即命名參數。結果依舊是在調用函數初時,與引用的是同一對象,所以首次的屬性賦值會對有所影響。
函數 參數
1.js函數不介意傳遞進來多少個參數,也不在乎傳遞進來參數是什么類型。
2.arguments對象:類數組
arguments對象的長度是由傳入的參數個數決定的,不是由定義函數時的參數(命名參數)個數決定的。
沒有傳遞值的命名參數自動被賦予undefined值。
用var操作符定義的變量將成為作用域中的局部變量。就是說函數中 使用var定義一個變量,這個變量在函數退出后就會被銷毀。
基本類型:存儲在棧(stack)中的簡單數據段,也就是說,它們的值直接存儲在變量訪問的位置。
引用類型:存儲在堆中的對象,也就是說,存儲在變量處的值是一個指針,指向堆中的對象。
所有函數的參數都是按值傳遞的。
在向參數傳遞基本類型的值時,被傳遞的值會被復制給一個局部變量,即命名參數。
只是把變量里的值傳遞給參數,之后參數和這個變量互不影響。
在向參數傳遞引用類型的值時,會把 這個值在內存中的地址復制給一個局部變量,因此這個局部變量的變化會反映在函數的外部。
對象變量它里面的值是這個對象在堆內存中的內存地址,這一點你要時刻銘記在心! 對于數組和對象等是將對象(數組)的變量的值傳遞給了函數參數,這個變量保存的指向對象(數組)的地址。
當函數改變這個地址指向的對象(數組)的內容時,同時也改變了函數外部變量指向的對象(數組)的內容; 當函數改變的是變量的地址時,實際就與函數外部的變量失去了聯系,變成了完全不同的對象了,不會對函數外部對象造成改變。
來看書里兩個經典的例子:
function setName(obj){ obj.name = "xiaoxiaozi"; } var person = new Object(); setName(person); alert(person.name); // 返回 xiaoxiaozi
在調用函數setName()時,person 被復制給了 obj 。因此在函數內部 obj 與 person 引用的是同一個對象,或者說是對同一個對象的引用。所以在給 obj 引用對象加上 name 屬性時,person 引用的對象也有了 name 屬性,因為雖然 obj 與 person 不同,但是二者引用的對象是同一個。
function setName(obj){ obj.name = "xiaoxiaozi"; obj = new Object(); obj.name = "admin"; } var person = new Object(); setName(person); alert(person.name); // 結果依舊是 xiaoxiaozi
在調用 setName() 函數初時,obj 與 person 引用的是同一對象,所以首次的 name 屬性賦值會對 person 有所影響。但是當 obj 被重新定義時,其引用的對象已經與 person 不同,所以后面設置的 name 屬性,不會對 person 引用的對象有任何影響。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80243.html
摘要:基本類型和引用類型用操作符定義的變量將成為作用域中的局部變量。在向參數傳遞基本類型的值時,被傳遞的值會被復制給一個局部變量即命名參數。結果依舊是在調用函數初時,與引用的是同一對象,所以首次的屬性賦值會對有所影響。 函數 參數 1.js函數不介意傳遞進來多少個參數,也不在乎傳遞進來參數是什么類型。2.arguments對象:類數組 arguments對象的長度是由傳入的參數個數決定的,...
摘要:值類型基本類型和棧內存值類型也稱為原始數據或原始值這類值存儲在棧內存中基本類型的值不可以修改。目前中的基本類型一共有六種。堆的使用規則當創建數組時,就會在堆內存中創建一個數組對象,并且在棧內存中創建一個對數組的引用。 值類型(基本類型)和棧內存 值類型也稱為原始數據或原始值(primitive value).這類值存儲在棧(stack)內存中, 基本類型的值不可以修改。每當我們定義一個...
摘要:熟悉的同學都知道,它的數據類型一般分為基本數據類型和引用數據類型復雜數據類型?;緮祿愋突緮祿愋陀蟹N新增。動態的屬性基本數據類型的值是沒有辦法添加屬性和方法的。類型檢測根據它的原型鏈來識別引用類型。 熟悉js的同學都知道,它的數據類型一般分為基本數據類型和引用數據類型(復雜數據類型)。那么他們之間到底有什么不同?從下面這個例子入手: var a = 1; ...
摘要:學習中函數參數值傳遞和引用傳遞的學習中函數參數值傳遞和引用傳遞在紅寶書中說到,中所有函數的參數都是按值傳遞的。 學習JS中函數參數值傳遞和引用傳遞的學習 JS中函數參數值傳遞和引用傳遞 在JavaScript紅寶書中說到,ECMAScript中所有函數的參數都是按值傳遞的。理解這個概念先要從JS的堆內存和棧內存說起:棧內存為自動分配的內存空間,它由系統自動釋放;堆內存則是動態分配的內存...
摘要:基本數據類型在中,基本數據類型有種,即數值字符串布爾值。兩個布爾值轉為數值進行比較。對于對象和布爾值,調用它們的方法得到對應的字符串值,然后進行字符串相加。減法對于字符串布爾值或者,自動調用,轉換結果若為,那么最終結果為。 這篇文章,來聊聊 JS 中的數據類型與變量。這是在學習 JS 時最基礎的一類問題,但卻很重要。希望我的分享有幫助到你。 文章開頭,我先提幾個面試中遇到的問題: 比如...
閱讀 1148·2021-11-24 10:43
閱讀 3102·2021-11-22 09:34
閱讀 3549·2021-10-08 10:04
閱讀 3932·2021-09-23 11:58
閱讀 3115·2019-08-30 15:44
閱讀 484·2019-08-30 13:01
閱讀 1155·2019-08-28 18:07
閱讀 1448·2019-08-26 13:42