帶你深入理解傳遞參數(shù)

傳遞參數(shù)

ECMAScript中所有函數(shù)的參數(shù)都是按值傳遞的。也就是說,把函數(shù)外部的值復(fù)制給函數(shù)內(nèi)部的參數(shù),就和把值從一個變量復(fù)制到另一個變量一樣?;绢愋椭档膫鬟f如同基本類型變量的復(fù)制一樣,而引用類型值的傳遞,則如同引用類型變量的復(fù)制一樣。有不少開發(fā)人員在這一點上可能會感到困惑,因為訪問變量有按值和按引用兩種方式,而參數(shù)只能按值傳遞。

在向參數(shù)傳遞基本類型的值時,被傳遞的值會被復(fù)制給一個局部變量(即命名參數(shù),或者用ECMAScript的概念來說,就是arguments對象中的一個元素)。在向參數(shù)傳遞引用類型的值時,會把這個值在內(nèi)存中的地址復(fù)制給一個局部變量,因此這個局部變量的變化會反映在函數(shù)的外部。請看下面這個例子:

function addTen(num) {

num += 10;

return num;

}

var count = 20;

var result = addTen(count);

alert(count); ? ?//20,沒有變化

alert(result); ?//30

這里的函數(shù)addTen()有一個參數(shù)num,而參數(shù)實際上是函數(shù)的局部變量。在調(diào)用這個函數(shù)時,變量count作為參數(shù)被傳遞給函數(shù),這個變量的值是20。于是,數(shù)值20被復(fù)制給參數(shù)num以便在addTen()中使用。在函數(shù)內(nèi)部,參數(shù)num的值被加上了10,但這一變化不會影響函數(shù)外部的count變量。參數(shù)num與變量count互不相識,它們僅僅是具有相同的值。假如num是按引用傳遞的話,那么變量count的值也將變成30,從而反映函數(shù)內(nèi)部的修改。當(dāng)然,使用數(shù)值等基本類型值來說明按值傳遞參數(shù)比較簡單,但如果使用對象,那問題就不怎么好理解了。再舉一個例子:

function?setName(obj)?{

obj.name?=?"Nicholas";

}

var?person?=?new?Object();

setName(person);

alert(person.name);????//"Nicholas"

以上代碼中創(chuàng)建一個對象,并將其保存在了變量person中。然后,這個變量被傳遞到setName()函數(shù)中之后就被復(fù)制給了obj。在這個函數(shù)內(nèi)部,obj和person引用的是同一個對象。換句話說,即使這個變量是按值傳遞的,obj也會按引用來訪問同一個對象。于是,當(dāng)在函數(shù)內(nèi)部為obj添加name屬性后,函數(shù)外部的person也將有所反映;因為person指向的對象在堆內(nèi)存中只有一個,而且是全局對象。有很多開發(fā)人員錯誤地認(rèn)為:在局部作用域中修改的對象會在全局作用域中反映出來,就說明參數(shù)是按引用傳遞的。

本文由web前端精髓為您提供

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,822評論 18 399
  • ECMAScript 中所有函數(shù)的參數(shù)都是按值傳遞的。也就是說,把函數(shù)外部的值復(fù)制給函數(shù)內(nèi)部的參數(shù),就和把值從一...
    封清揚閱讀 156評論 0 0
  • title: 原生js對象的淺拷貝和深拷貝的總結(jié) 這里是說明. 在此之前我們先復(fù)習(xí)兩個知識點. 第一個知識點:對象...
    KingJeason閱讀 936評論 1 8
  • 寧昊仔細(xì)一看,頓時后背驚起一片白毛細(xì)汗。 那披頭散發(fā)的人正是林雪初,此時雪白的臉上帶著詭異的呲笑,正從二樓探出身子...
    可可豆子閱讀 199評論 0 5
  • 無雪的冬季, 藏匿著多情的你我, 在屋檐下、在寒風(fēng)里, 在這里…… 在一切可已觸摸的空間里, 零距離的接觸, 有著...
    青塵楓月閱讀 233評論 0 0

友情鏈接更多精彩內(nèi)容