引數的傳遞

2022-07-16 11:57:10 字數 1142 閱讀 3811

q : 引數 到底是 按值傳遞 還是 按引用傳遞 ?

a : 按值傳遞

例子 :

// 這裡用乙個經典的 引用型別傳遞到函式引數中 , 來佐證是按值傳遞的

function setname(object)

let person = new object();

setname(person);

console.log(person.name);//display 'name changed'

分析 :

步驟①起到效果了

步驟②中,object指向了新的物件,即 引用的值/位址 改變了

但是 person並沒有指向新的物件(這個新的物件在函式退出時 就銷毀了)

如果是按引用傳遞,則person應該指向第②步中的新物件,即使後來它銷毀了,person也沒有理由重新指向原來的物件

然而結果是 person就是指向了原來的物件,並且name的值已經設定成功, 說明 函式在接收引數的時候, 是按值傳遞的(值就是複製了的引用)

總結一句話 :

變數的訪問 分為 按值訪問 以及 按引用訪問 ;

引數的傳遞 只有 按值傳遞.

以上是書中的例子 , 但是我感覺並不能佐證 引數按值傳遞的

以下**是傳說中的 引用型別在訪問時 是 按引用訪問 .

但是效果 和 上面的函式傳參 進行模擬 , 反而可以得出 引數是按引用傳遞的.

var person = new object() ;

person.id = 1 ;

var object = person ;  //這一步相當於傳遞到形參中 , object就是形參

object.id = 2 ;

object = new object();

object.id = 3 ;

console.log(person.id); //display 2

// 當我 對此感到 疑慮的時候 , 在網上搜尋了一下 , 還有說 既不是按值傳遞 , 也不是按引用傳遞的. 有人提出了 按共享傳遞.

// 結果在 這個頁面上 看到了乙個作者 寫的反例** 以及結論 和我不謀而合 , 哈哈,寫書的大神的結論是錯誤的 o(∩_∩)o~

// 他的鏈結 : 

******************************===

引數的傳遞

我們都應該知道所謂的程式語言就是通過一系列的函式變換,實現資料的傳輸,變換,最終呈現出我們所需要的效果。可以說無論是什麼程式語言資料的傳遞都是彌足珍貴的。可是我們在傳輸資料的過程中不能僅僅是簡單的傳輸,我們需要一種載體來承接我們傳輸的內容,也就是我要說的引數。引數有形參和實參之分,所謂的實參可以理解...

python 引數傳遞 Python 引數傳遞

python中的變數 乙個變數是區域性還是全域性,在編譯函式的時候就已經決定,因此讀變數值的時候也不會逐層向外查詢。變數是全域性還是局域,根據如下3條 1.如果函式內部有global語句,那麼它宣告的變數是全域性的。2.如果函式內部有對變數的賦值語句,那麼它是局域的。3.除此之外都是全域性的。注意1...

python 引數傳遞 python引數傳遞

python中函式引數的傳遞是通過 賦值 來傳遞的。但這條規則只回答了函式引數傳遞的 戰略問題 並沒有回答 戰術問題 也就說沒有回答怎麼賦值的問題。函式引數的使用可以分為兩個方面,一是函式引數如何定義,二是函式在呼叫時的引數如何解析的。而後者又是由前者決定的。函式引數的定義有四種形式 1.f arg...