国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript函數(shù)參數(shù)的傳遞方式詳解

2024-05-06 15:10:15
字體:
供稿:網(wǎng)友

JavaScript使用一個變量對象來追蹤變量的生存期。基本類型值被直接保存在變量對象內(nèi);而引用類型值則作為一個指針保存在變量對象內(nèi),該指針指向?qū)嶋H對象在內(nèi)存中的存儲位置。

基本類型值的傳遞

向參數(shù)傳遞基本類型值時,被傳遞的值會被復(fù)制給一個局部變量(即命名參數(shù),或者是arguments對象中的一個元素)。

function addOne (num) { num++; return num;}var count = 1;var result = addOne(count);console.log(count); //1console.log(result); //2

在上面的例子中,變量count的值被傳遞給函數(shù)的參數(shù)num以便在函數(shù)中使用,此時變量count和參數(shù)num的值雖然是一樣的,但是它們是兩個相互獨立的變量,在函數(shù)中改變參數(shù)num的值并不會影響函數(shù)外部的變量count的值。

因此JavaScript中函數(shù)的基本類型值參數(shù)的傳遞是按值傳遞的。

引用類型值的傳遞

function setName (obj) { obj.name = 'Nicholas';}var person = new Object();setName(person);console.log(person.name); //'Nicholas'

在上面的例子中,變量person的值被傳遞給函數(shù)的參數(shù)obj,此時在函數(shù)內(nèi)部為參數(shù)obj添加一個name屬性,函數(shù)對參數(shù)obj的使得函數(shù)外部的變量person也獲得了一個name屬性。從結(jié)果上看,JavaScript中函數(shù)的引用類型值參數(shù)的傳遞似乎是按引用傳遞的。

然而并非如此。變量person的值是引用類型值,因此它的值在變量對象中可以看做是一個實際對象在內(nèi)存中的地址(或指針)。傳遞參數(shù)以后參數(shù)obj的值是也是該對象在內(nèi)存中的地址,因此在函數(shù)中操作參數(shù)obj的值所引用的對象相當(dāng)于操作變量person的值所引用的對象。

function setName (obj) { obj.name = 'Nicholas'; obj = new Object(); obj.name = 'Greg'; return obj;}var person = new Object();var result = setName(person);console.log(person.name); //'Nicholas'console.log(result.name); //'Greg'

如果參數(shù)傳遞是按引用傳遞的,在上面的例子中,函數(shù)改變了參數(shù)obj的值所引用的對象,那么相對應(yīng)的變量person的值所引用的對象也會改變。改變函數(shù)的寫法或許能更加有助于理解參數(shù)的按值傳遞。

function setName () { var obj = arguments[0]; obj.name = 'Nicholas'; obj = new Object(); obj.name = 'Greg'; return obj;}

雖然變量person和參數(shù)obj的值一樣都是同一個對象在內(nèi)存中的地址,但它們是兩個相互獨立的變量。如果在函數(shù)中改變參數(shù)obj的值,使其指向內(nèi)存中另外一個對象,變量person的值不會改變,還是指向原來的對象。

因此JavaScript中函數(shù)的引用類型值參數(shù)的傳遞是按值傳遞的。

結(jié)論

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

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持錯新站長站!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 蕉岭县| 闽清县| 稷山县| 安康市| 阳山县| 凉城县| 饶平县| 扶沟县| 扶风县| 东乌| 峨山| 迁安市| 金秀| 收藏| 全州县| 阳新县| 凉城县| 綦江县| 肥西县| 尼玛县| 平度市| 于田县| 忻州市| 拉孜县| 昆山市| 宜宾市| 龙游县| 章丘市| 八宿县| 大英县| 全州县| 大石桥市| 越西县| 福建省| 伊宁市| 深圳市| 镇康县| 常熟市| 象山县| 师宗县| 莎车县|