摘要:以上的代碼也可以寫為這樣在處,函數(shù)會將參數(shù)先聲明并賦值,值就為下面?zhèn)魅氲膮?shù)的值,的值為因此賦得值也為。
ECMAScript變量可能包含兩種不同的數(shù)據(jù)類型:基本數(shù)據(jù)類型和引用數(shù)據(jù)類型,這兩種類型的值傳遞是存在不同的.
在我們談這兩種數(shù)據(jù)類型的值傳遞前,為了便于理解,我想首先談一下這兩種數(shù)據(jù)類型有關(guān)復(fù)制操作存在的不同
數(shù)據(jù)類型的復(fù)制 基本類型var num1 = 10; var num2 = num1; num2 = 11; console.log(num1);//10 console.log(num2);//11
基本數(shù)據(jù)類型從一個復(fù)制到另一個,會在變量對象上創(chuàng)建一個新值,然后把該值復(fù)制到新變量分配的位置上,改變其中一個不會影響另一個。
本小白用拙劣的畫功演示一下
一開始聲明變量num1并賦值為10,它便以圖中的形式存在某種結(jié)構(gòu)中,當(dāng)用num1的值來初始化num2的時候,此時就相當(dāng)于聲明變量num2并賦值為num1中的值,該值只是num1中的一個副本,賦值結(jié)束,這兩個變量便再無瓜葛,進(jìn)行后面的操作也不會相互影響
引用類型引用類型我們采用數(shù)組,數(shù)組的聲明有兩種方式,一種為var 數(shù)組名 = []另一種為var 數(shù)組名 = new array()
var arr1 = [1,2,3,4]; var arr2 = arr1; arr2[0] = 10; console.log(arr1);//[10,2,3,4] console.log(arr2);//[10,2,3,4]
此處及下文輸出省略掉數(shù)組長度,可以看出輸出的結(jié)果都為[10,2,3,4]. 和基本數(shù)據(jù)類型完全不同.
當(dāng)聲明數(shù)組變量并賦值的時候,同樣也會存入一個結(jié)構(gòu)當(dāng)中,但是這個結(jié)構(gòu)不能存[1,2,3,4]這種數(shù)據(jù),要存到堆中去,就是圖片右邊那個橢圓形的區(qū)域,但是存入的數(shù)據(jù)還是要找到它。每個存儲位置都有相應(yīng)的地址,所以它在左邊那個結(jié)構(gòu)中存入的是一個指向數(shù)組對象的這樣的一個地址。
當(dāng)復(fù)制引用類型變量的時候,同樣也會將存儲在左邊結(jié)構(gòu)中的值復(fù)制一份放到為新變量分配的空間中去,只不過因為這個值的副本是一個指向堆中原數(shù)組對象的地址,兩個變量名就相當(dāng)于引用了同一個地址中的內(nèi)容。因此,改變其中的一個變量,就會影響另一個
var arr3=[1,2,3,4]; var arr4=arr3; arr4=[5,6,7,8]; console.log(arr3);//[1,2,3,4] console.log(arr4);//[5,6,7,8]
這個相比于前面那個,只是在第三行代碼中出現(xiàn)了不同,arr4=[5,6,7,8]將一個新的數(shù)組對象賦給變量arr4,這時arr4后的地址就改變了,也就指向了新的數(shù)組對象,這兩個變量也就完全不相同了.
可以實(shí)驗一下console.log(new Array(1,2)===new Array(1,2)),這個在控制臺返回的是false
那好,現(xiàn)在有了這些鋪墊,我們再來談我們今天的主要內(nèi)容.
數(shù)據(jù)類型的值傳遞 基本類型var num = 10; function change(num){ num = 11; console.log(num);//11 } change(num); console.log(num);//10
在像參數(shù)傳遞基本類型的值時,被傳遞的值會被先復(fù)制給一個局部變量,其實(shí)就可以理解為基本數(shù)據(jù)類型的賦值。以上的代碼也可以寫為這樣
var num = 10; function change(){ var num = 10;//look num = 11; console.log(num);//11 } change(num); console.log(num);//10
在look處,函數(shù)會將參數(shù)先聲明并賦值,值就為下面?zhèn)魅氲膮?shù)的值,num的值為10,因此賦得值也為10。但此時函數(shù)中的num和函數(shù)外部的num其實(shí)是毫不相關(guān)的,因此并不會相互影響
引用類型var arr = [1,2,3,4]; function change(arr){ arr[0] = 10; console.log(arr);//[10,2,3,4] } change(arr); console.log(arr)//[10,2,3,4]
引用類型也如此,也可以理解為引用類型的復(fù)制操作,在函數(shù)的開頭就會將arr賦值為傳來的數(shù)值,雖然也是一開始聲明的引用類型的副本,但是因為引用類型傳來的數(shù)值是地址,因此函數(shù)中的arr和函數(shù)外面的arr都將引用同一個地址中的數(shù)組對象,因為arr指向的數(shù)組對象在堆中只有一個,又是全局變量,因此這兩個arr是相同的,同樣我們再看那一種聲明數(shù)組并賦值的.
var arr=[1,2,3,4]; function change(arr) { arr=[4,5,6,7]; console.log(arr);//[4,5,6,7] } change(arr); console.log(arr);//[1,2,3,4]
那這個也就應(yīng)該可以理解了,雖然在傳參的時候傳入的確實(shí)是一開始聲明的數(shù)組對象的地址的副本,但是因為在函數(shù)內(nèi)部又聲明了一個新的數(shù)組對象,在這里arr引用的就是一個局部的數(shù)組對象了,而這個局部對象就會在函數(shù)結(jié)束后立即被銷毀,不會影響函數(shù)外部的數(shù)組對象
本小白大二學(xué)生...自學(xué)前端一年,水平有限,就先解釋這么多了,如果有不對的還請大佬們指點(diǎn),本小白定當(dāng)悔過自新,重新做人.
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/84330.html
摘要:當(dāng)初看這個解釋有點(diǎn)懵逼,理解成閉包就是函數(shù)中的函數(shù)了。里的閉包最近不滿足于只干前端的活,開始用起了。里的閉包最近在學(xué)習(xí)語言,讓我們來看一下語言里的閉包。在中,閉包特指將函數(shù)作為值返回的情況,被返回的函數(shù)引用了生成它的母函數(shù)中的變量。 本人開始接觸編程是從js開始的,當(dāng)時網(wǎng)上很多人說閉包是難點(diǎn),各種地方對閉包的解釋也是千奇百怪。如今開始接觸js以外的各種編程語言,發(fā)現(xiàn)不光是js,php、...
摘要:當(dāng)初看這個解釋有點(diǎn)懵逼,理解成閉包就是函數(shù)中的函數(shù)了。里的閉包最近不滿足于只干前端的活,開始用起了。里的閉包最近在學(xué)習(xí)語言,讓我們來看一下語言里的閉包。在中,閉包特指將函數(shù)作為值返回的情況,被返回的函數(shù)引用了生成它的母函數(shù)中的變量。 本人開始接觸編程是從js開始的,當(dāng)時網(wǎng)上很多人說閉包是難點(diǎn),各種地方對閉包的解釋也是千奇百怪。如今開始接觸js以外的各種編程語言,發(fā)現(xiàn)不光是js,php、...
摘要:今天就來談?wù)労偷淖饔煤蛥^(qū)別。對于基礎(chǔ)類型的作用就是判斷值是否相等比如是是。就是重寫了方法,所以出現(xiàn)了和結(jié)果不一致的情況。當(dāng)然重寫是有一定的標(biāo)準(zhǔn)的,如傳遞性,對稱性等等,具體可以看源碼要求不再一一展開。 判斷對象是否相等是我們在項目中經(jīng)常用到的,也是入門java必學(xué)的知識。今天就來談?wù)?=和equals的作用和區(qū)別。 1.==如何判斷相等 先看一下一段代碼: int ...
摘要:已經(jīng)被廢除,具體缺陷可以參考二為了解決的缺陷,第二種解決方案是高階組件簡稱。我們定義了父組件,存在自身的,并且將自身的通過的方式傳遞給了子組件。返回一個標(biāo)識該的變量,以及更新該的方法。 ??為了實(shí)現(xiàn)分離業(yè)務(wù)邏輯代碼,實(shí)現(xiàn)組件內(nèi)部相關(guān)業(yè)務(wù)邏輯的復(fù)用,在React的迭代中針對類組件中的代碼復(fù)用依次發(fā)布了Mixin、HOC、Render props等幾個方案。此外,針對函數(shù)組件,在Reac...
摘要:已經(jīng)被廢除,具體缺陷可以參考二為了解決的缺陷,第二種解決方案是高階組件簡稱。我們定義了父組件,存在自身的,并且將自身的通過的方式傳遞給了子組件。返回一個標(biāo)識該的變量,以及更新該的方法。 ??為了實(shí)現(xiàn)分離業(yè)務(wù)邏輯代碼,實(shí)現(xiàn)組件內(nèi)部相關(guān)業(yè)務(wù)邏輯的復(fù)用,在React的迭代中針對類組件中的代碼復(fù)用依次發(fā)布了Mixin、HOC、Render props等幾個方案。此外,針對函數(shù)組件,在Reac...
閱讀 2814·2023-04-26 02:00
閱讀 2771·2019-08-30 15:54
閱讀 861·2019-08-30 11:15
閱讀 1502·2019-08-29 15:31
閱讀 917·2019-08-29 14:12
閱讀 489·2019-08-29 13:08
閱讀 838·2019-08-27 10:51
閱讀 2706·2019-08-26 12:17