摘要:在操作對(duì)象時(shí),實(shí)際上是在操作對(duì)象的引用而不是實(shí)際的對(duì)象。任一變量值操作互不影響。訪問(wèn)變量有按值和按引用兩種方式,而參數(shù)只能按值傳遞?;绢愋蛥?shù)傳遞傳給函數(shù)的是數(shù)值的一個(gè)復(fù)制,函數(shù)中對(duì)其的修改外部不可見(jiàn)。
?? ECMAScript 變量可能包含兩種不同數(shù)據(jù)類型的值:基本類型值和引用類型值。 基本類型值指的是簡(jiǎn)單的數(shù)據(jù)段,而引用類型值指那些可能由多個(gè)值構(gòu)成的對(duì)象。
??5 種基本數(shù)據(jù)類型: Undefined、 Null、 Boolean、 Number 和 String。這 5 種基本數(shù)據(jù)類型是按值訪問(wèn)的,因?yàn)榭梢圆僮鞅4嬖谧兞恐械膶?shí)際的值。ES6有多出一種Symbol類型。
訪問(wèn)變量??引用類型的值是保存在內(nèi)存中的對(duì)象,JavaScript 不允許直接訪問(wèn)內(nèi)存中的位置,也就是說(shuō)不能直接操作對(duì)象的內(nèi)存空間。在操作對(duì)象時(shí),實(shí)際上是在操作對(duì)象的引用而不是實(shí)際的對(duì)象。為此,引用類型的值是按引用訪問(wèn)的。
復(fù)制變量值【復(fù)制變量值】復(fù)制基本類型變量的值,會(huì)在該變量對(duì)象上創(chuàng)建一個(gè)新值,然后把該值復(fù)制到新變量分配的位置上。任一變量值操作互不影響。
【復(fù)制引用指針】復(fù)制引用類型變量的值,同樣會(huì)將存儲(chǔ)在變量對(duì)象中的值復(fù)制一份放到新變量分配的空間中,不同的是這個(gè)值的副本實(shí)際上一個(gè)指針,而這個(gè)指針指向存儲(chǔ)在堆中的一個(gè)對(duì)象。復(fù)制后,兩個(gè)變量實(shí)際上將引用同一個(gè)對(duì)象。因此,改變?nèi)我庾兞?,都?huì)影響另一個(gè)變量。
參數(shù)傳遞??ECMAScript 中所有函數(shù)的參數(shù)都是按值傳遞的。訪問(wèn)變量有按值和按引用兩種方式,而參數(shù)只能按值傳遞。
??
基本類型參數(shù)傳遞:傳給函數(shù)的是數(shù)值的一個(gè)復(fù)制,函數(shù)中對(duì)其的修改外部不可見(jiàn)。
var a = 1; var b = 2; function change(a, b) { var c = a; a = b; b = c; console.log(a); //2 console.log(b); //1 } change(a, b); console.log(a); //1 console.log(b); //2
引用類型參數(shù)傳遞:傳給函數(shù)的是數(shù)值的一個(gè)引用,函數(shù)中對(duì)其屬性的修改外部可見(jiàn),但用新引用覆蓋其則在外部不可見(jiàn)
var a = [1, 2, 3]; var b = [5, 6]; function change(a,b) { a[0] = 4; //對(duì)其屬性的修改外部可見(jiàn) var c = a; a = b; //用新引用覆蓋 b = c; console.log(a); //"5,6" console.log(b); //"4,2,3" } change(a,b); console.log(a); //"4,2,3" console.log(b); //"5,6"
??a,b是change函數(shù)中的變量,在調(diào)用函數(shù)時(shí)傳遞了a,b的引用賦給了這兩個(gè)變量,但是并不能改變?nèi)种械腶,b。因?yàn)橛眯乱酶采w在外部不可見(jiàn),因?yàn)楹瘮?shù)只是拿到了引用 并沒(méi)有權(quán)力更改引用。
var a = [1, 2, 3]; var b = [5, 6]; function change() { var c = a; a[0] = 4; //對(duì)其屬性的修改外部可見(jiàn) a = b; //用新引用覆蓋 b = c; } change(a,b); console.log(a); //"5,6" console.log(b); //"4,2,3"
??因?yàn)閖s沒(méi)有塊級(jí)作用域,所以它在change里找不到變量a,b就會(huì)自覺(jué)的到上層去找,所以這里的a,b是全局變量的引用。
???深究JavaScript系列???
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/89325.html
摘要:構(gòu)造器的目的是要?jiǎng)?chuàng)建一個(gè)新對(duì)象并對(duì)其進(jìn)行設(shè)置,然后將其作為構(gòu)造器的返回值進(jìn)行返回,是通過(guò)函數(shù)調(diào)用初始化創(chuàng)建新對(duì)象?;蚍椒ㄟM(jìn)行調(diào)用通過(guò)或調(diào)用函數(shù),被調(diào)用的函數(shù)的指向第一個(gè)參數(shù)指向的。 this ??JavaScript的this總是指向一個(gè)對(duì)象,而這個(gè)對(duì)象是基于函數(shù)運(yùn)行時(shí)動(dòng)態(tài)綁定的,并非函數(shù)聲明時(shí)綁定。 函數(shù)調(diào)用方式 作為對(duì)象的方法調(diào)用 作為普通函數(shù)進(jìn)行調(diào)用 作為構(gòu)造器進(jìn)行調(diào)用 通過(guò)a...
摘要:表達(dá)式?jīng)]有返回值,因此返回結(jié)果是。并不改變表達(dá)式的結(jié)果,只要讓表達(dá)式不返回值按慣例我們用來(lái)獲得這主要源自語(yǔ)言,當(dāng)然使用或其他表達(dá)式也是可以的。不是數(shù)字的數(shù)字如果數(shù)學(xué)運(yùn)算的操作數(shù)不是數(shù)字類型,就無(wú)法返回一個(gè)有效的數(shù)字,這種情況下返回值為。 這里的內(nèi)容是讀書(shū)筆記,僅供自己學(xué)習(xí)所用,有欠缺的地方歡迎留言提示。 第一部分 類型和語(yǔ)法 第1章 類型ECMAScript語(yǔ)言類型包括Undefin...
摘要:所謂數(shù)組英語(yǔ),是有序的元素序列。組成數(shù)組的各個(gè)變量稱為數(shù)組的分量,也稱為數(shù)組的元素,有時(shí)也稱為下標(biāo)變量。在棧中添加數(shù)據(jù)和刪除數(shù)據(jù)也被稱為推入和彈出,而且推入和彈出只會(huì)發(fā)生在棧的頂部。棧是一種數(shù)據(jù)結(jié)構(gòu),而隊(duì)列則是一種的數(shù)據(jù)結(jié)構(gòu),即先進(jìn)先出。 所謂數(shù)組(英語(yǔ):Array),是有序的元素序列。 若將有限個(gè)類型相同的變量的集合命名,那么這個(gè)名稱為數(shù)組名。 組成數(shù)組的各個(gè)變量稱為數(shù)組的分量,也稱...
摘要:一系列活動(dòng)的執(zhí)行上下文從邏輯上形成一個(gè)棧。堆棧中的上下文就會(huì)被依次執(zhí)行并且彈出堆棧,直到回到全局的上下文。確定上下文中的指向?qū)ο蟠_定指向或當(dāng)前對(duì)象。 定義 執(zhí)行上下文(也稱執(zhí)行環(huán)境execution context)(簡(jiǎn)稱:EC)是個(gè)抽象的概念,是在函數(shù)被調(diào)用時(shí),但是在函數(shù)體被真正執(zhí)行以前所創(chuàng)建的。每個(gè)執(zhí)行上下文都有一個(gè)變量對(duì)象(variable object),保存著當(dāng)前環(huán)境中所有的...
摘要:是構(gòu)造函數(shù)的屬性,而不是實(shí)例對(duì)象的屬性,指向原型對(duì)象。這個(gè)連接存在于實(shí)例與構(gòu)造函數(shù)的原型對(duì)象而不是構(gòu)造函數(shù)之間,也就是說(shuō)實(shí)例對(duì)象與構(gòu)造函數(shù)沒(méi)有直接關(guān)系。 prototype、constructor、__proto__ ??prototype是站在構(gòu)造函數(shù)的角度討論原型對(duì)象的,用來(lái)實(shí)現(xiàn)基于原型的繼承與屬性的共享。__proto__是站在實(shí)例對(duì)象的角度討論原型對(duì)象,構(gòu)成原型鏈,同樣用于實(shí)現(xiàn)...
閱讀 2938·2021-11-16 11:55
閱讀 2707·2021-09-29 09:34
閱讀 3627·2021-09-01 14:21
閱讀 3880·2019-08-29 12:36
閱讀 754·2019-08-26 10:55
閱讀 4127·2019-08-26 10:20
閱讀 1096·2019-08-23 18:19
閱讀 1256·2019-08-23 17:56