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