JavaScript深入之參數(shù)按值傳遞

JavaScript深入系列第九篇曹步,除了按值傳遞、引用傳遞,還有第三種傳遞方式 —— 按共享傳遞

定義

在《JavaScript高級(jí)程序設(shè)計(jì)》第三版 4.1.3,講到傳遞參數(shù):

ECMAScript中所有函數(shù)的參數(shù)都是按值傳遞的葱蝗。

什么是按值傳遞呢?

也就是說(shuō)细燎,把函數(shù)外部的值復(fù)制給函數(shù)內(nèi)部的參數(shù),就和把值從一個(gè)變量復(fù)制到另一個(gè)變量一樣皂甘。

按值傳遞

舉個(gè)簡(jiǎn)單的例子:

var value = 1;
function foo(v) {
    v = 2;
    console.log(v); //2
}
foo(value);
console.log(value) // 1

很好理解玻驻,當(dāng)傳遞 value 到函數(shù) foo 中,相當(dāng)于拷貝了一份 value偿枕,假設(shè)拷貝的這份叫 _value璧瞬,函數(shù)中修改的都是 _value 的值,而不會(huì)影響原來(lái)的 value 值渐夸。

引用傳遞

拷貝雖然很好理解嗤锉,但是當(dāng)值是一個(gè)復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的時(shí)候,拷貝就會(huì)產(chǎn)生性能上的問(wèn)題墓塌。

所以還有另一種傳遞方式叫做按引用傳遞瘟忱。

所謂按引用傳遞奥额,就是傳遞對(duì)象的引用,函數(shù)內(nèi)部對(duì)參數(shù)的任何改變都會(huì)影響該對(duì)象的值访诱,因?yàn)閮烧咭玫氖峭粋€(gè)對(duì)象垫挨。

舉個(gè)例子:

var obj = {
    value: 1
};
function foo(o) {
    o.value = 2;
    console.log(o.value); //2
}
foo(obj);
console.log(obj.value) // 2

哎,不對(duì)啊触菜,連我們的紅寶書(shū)都說(shuō)了 ECMAScript 中所有函數(shù)的參數(shù)都是按值傳遞的九榔,這怎么能按引用傳遞成功呢?

而這究竟是不是引用傳遞呢涡相?

第三種傳遞方式

不急哲泊,讓我們?cè)倏磦€(gè)例子:

var obj = {
    value: 1
};
function foo(o) {
    o = 2;
    console.log(o); //2
}
foo(obj);
console.log(obj.value) // 1

如果 JavaScript 采用的是引用傳遞,外層的值也會(huì)被修改吶催蝗,這怎么又沒(méi)被改呢切威?所以真的不是引用傳遞嗎?

這就要講到其實(shí)還有第三種傳遞方式生逸,叫按共享傳遞牢屋。

而共享傳遞是指,在傳遞對(duì)象的時(shí)候槽袄,傳遞對(duì)象的引用的副本烙无。

注意: 按引用傳遞是傳遞對(duì)象的引用,而按共享傳遞是傳遞對(duì)象的引用的副本遍尺!

所以修改 o.value截酷,可以通過(guò)引用找到原值,但是直接修改 o乾戏,并不會(huì)修改原值迂苛。所以第二個(gè)和第三個(gè)例子其實(shí)都是按共享傳遞。

最后鼓择,你可以這樣理解:

參數(shù)如果是基本類(lèi)型是按值傳遞三幻,如果是引用類(lèi)型按共享傳遞。

但是因?yàn)榭截惛北疽彩且环N值的拷貝呐能,所以在高程中也直接認(rèn)為是按值傳遞了念搬。

所以,高程摆出,誰(shuí)叫你是紅寶書(shū)嘞朗徊!

下一篇文章

JavaScript深入之call和apply的模擬實(shí)現(xiàn)

深入系列

JavaScript深入系列目錄地址:https://github.com/mqyqingfeng/Blog

JavaScript深入系列預(yù)計(jì)寫(xiě)十五篇左右偎漫,旨在幫大家捋順JavaScript底層知識(shí)爷恳,重點(diǎn)講解如原型、作用域象踊、執(zhí)行上下文温亲、變量對(duì)象棚壁、this、閉包铸豁、按值傳遞灌曙、call、apply节芥、bind在刺、new、繼承等難點(diǎn)概念头镊。

如果有錯(cuò)誤或者不嚴(yán)謹(jǐn)?shù)牡胤津纪眨?qǐng)務(wù)必給予指正,十分感謝相艇。如果喜歡或者有所啟發(fā)颖杏,歡迎star,對(duì)作者也是一種鼓勵(lì)坛芽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末留储,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子咙轩,更是在濱河造成了極大的恐慌获讳,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件活喊,死亡現(xiàn)場(chǎng)離奇詭異丐膝,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)钾菊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)帅矗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人煞烫,你說(shuō)我怎么就攤上這事浑此。” “怎么了滞详?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵尤勋,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我茵宪,道長(zhǎng),這世上最難降的妖魔是什么瘦棋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任稀火,我火速辦了婚禮,結(jié)果婚禮上赌朋,老公的妹妹穿的比我還像新娘凰狞。我一直安慰自己篇裁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布赡若。 她就那樣靜靜地躺著达布,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逾冬。 梳的紋絲不亂的頭發(fā)上黍聂,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音身腻,去河邊找鬼产还。 笑死,一個(gè)胖子當(dāng)著我的面吹牛嘀趟,可吹牛的內(nèi)容都是我干的脐区。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼她按,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼牛隅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起酌泰,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤媒佣,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后宫莱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體丈攒,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年授霸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了巡验。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碘耳,死狀恐怖显设,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辛辨,我是刑警寧澤捕捂,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站斗搞,受9級(jí)特大地震影響指攒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜僻焚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一允悦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧虑啤,春花似錦隙弛、人聲如沸架馋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)叉寂。三九已至,卻和暖如春总珠,著一層夾襖步出監(jiān)牢的瞬間屏鳍,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工姚淆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留孕蝉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓腌逢,卻偏偏與公主長(zhǎng)得像降淮,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子搏讶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容