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