摘要:值傳遞的典型這是典型的值傳遞的例子,只是把它的值給了局部變量,因此他們的存儲(chǔ)是分開(kāi)的,函數(shù)不會(huì)改變的值??磥?lái)的參數(shù)傳遞還是有點(diǎn)小復(fù)雜的。
預(yù)備知識(shí) 首先要明白基本類型和引用類型的區(qū)別: 基本類型:
var num1=5; var num2=num1;
基本類型存儲(chǔ)圖
從他們的存儲(chǔ)空間可知:num1和num2的存儲(chǔ)是獨(dú)立的,改變其中一個(gè)的值,另一個(gè)不會(huì)受到影響
引用類型:var obj1=new Object(); var obj2=obj1; obj1.name="Nicholas"; console.log(obj2.name); //Nicholas
引用類型存儲(chǔ)圖
從他們的存儲(chǔ)空間可知,改變其中一個(gè)的屬性值,另一個(gè)的屬性值也會(huì)改變。
值傳遞的典型function addTen(num){ return num+10; } var count=20; var result=addTen(count); console.log(count); //20 console.log(result); //30
這是典型的值傳遞的例子,count只是把它的值給了局部變量,因此他們的存儲(chǔ)是分開(kāi)的,函數(shù)不會(huì)改變count的值。
傳遞引用類型也屬于值傳遞function setName(obj){ obj.name="Nicholas"; } var person=new Object(); setName(person); console.log(person.name); //Nicholas
咦?person對(duì)象的值已經(jīng)改變了呀,為什么它還是值傳遞呢?
先讓我們?cè)賮?lái)看一個(gè)例子吧:
function setName(obj){ obj.name="Nicholas"; obj=new Object(); obj.name="Greg"; } var person=new Object(); setName(person); console.log(person.name); //Nicholas
如果為引用傳遞:則在第二個(gè)例子中,person把它的地址給了局部obj,局部obj擁有了另一把可以進(jìn)入person操作的鑰匙,obj在第三行new的時(shí)候便會(huì)把person指向一個(gè)新的對(duì)象,person的名字將變?yōu)镚reg,可是結(jié)果并非如此,所以不是引用傳遞。
person存儲(chǔ)在堆中,是全局的,具有唯一性,person傳值時(shí),obj可以對(duì)他進(jìn)行操作,可以理解為person給了obj鑰匙,但是門的掌控權(quán)仍在person手中,obj不能再建一個(gè)新門。
看來(lái)js的參數(shù)傳遞還是有點(diǎn)小復(fù)雜的。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/91064.html
摘要:但牛津哲大學(xué)哲學(xué)家兼首席人工智能科學(xué)家認(rèn)為,我們可以將所有的結(jié)果歸納為兩大類。認(rèn)為,物種不朽與物種滅絕同樣具有吸引人的狀態(tài),即如果我們能做到這一點(diǎn),我們將永遠(yuǎn)不受滅絕的影響我們將擁有戰(zhàn)勝死亡的機(jī)會(huì)。 showImg(https://segmentfault.com/img/remote/1460000019316706); 我們面臨著一個(gè)非常困難的問(wèn)題,在一個(gè)未知的時(shí)間內(nèi)來(lái)解決它,而人...
摘要:奔著一星期徹底弄清楚一個(gè)小知識(shí)點(diǎn)的目的這次的目標(biāo)是方法在實(shí)際項(xiàng)目中經(jīng)常會(huì)用到這三個(gè)函數(shù)只是簡(jiǎn)單的知道都是用來(lái)進(jìn)行上下文綁定的這三個(gè)函數(shù)都可以實(shí)現(xiàn)現(xiàn)在看來(lái)這三者還是有很大區(qū)別的特別是和其他兩個(gè)的區(qū)別先說(shuō)和目的是改變函數(shù)的執(zhí)行上下文下面列舉一些 奔著一星期徹底弄清楚一個(gè)javascript小知識(shí)點(diǎn)的目的,這次的目標(biāo)是call apply bind方法 在實(shí)際項(xiàng)目中,經(jīng)常會(huì)用到這三個(gè)函數(shù),只...
摘要:本系列的第一篇文章著重提供一個(gè)關(guān)于引擎運(yùn)行時(shí)和調(diào)用棧的概述。在硬件層面,計(jì)算機(jī)內(nèi)存由大量的觸發(fā)器組成。每個(gè)觸發(fā)器包含幾個(gè)晶體管能夠存儲(chǔ)一個(gè)比特譯注位??梢酝ㄟ^(guò)唯一標(biāo)識(shí)符來(lái)訪問(wèn)單個(gè)觸發(fā)器,所以可以對(duì)它們進(jìn)行讀寫操作。比特稱為個(gè)字節(jié)。 原文 How JavaScript works: memory management + how to handle 4 common memory lea...
摘要:所以傳遞給函數(shù)的值是這個(gè)值,所以函數(shù)執(zhí)行結(jié)束原始變量并不會(huì)改變。傳值調(diào)用在傳值調(diào)用中,傳遞給函數(shù)參數(shù)是函數(shù)被調(diào)用時(shí)所傳實(shí)參的拷貝。引用類型變量的值是一個(gè)指針,指向堆內(nèi)存中的實(shí)際對(duì)象。所以傳共享調(diào)用也可以說(shuō)是傳值調(diào)用。 1. 例子 先來(lái)看兩個(gè)個(gè)來(lái)自于 《JavaScript 高級(jí)程序設(shè)計(jì)》P70-P71 的兩個(gè)例子。 1.1. 基本類型參數(shù)傳遞 function addTen(num) ...
閱讀 2457·2019-08-30 15:53
閱讀 2572·2019-08-29 13:11
閱讀 2653·2019-08-29 12:45
閱讀 3486·2019-08-29 12:41
閱讀 2326·2019-08-26 10:14
閱讀 2154·2019-08-23 14:39
閱讀 2314·2019-08-23 12:38
閱讀 3378·2019-08-23 12:04