總是通過值拷貝來賦予,null,undefined,string,number,boolean.
將簡單值當引數傳入函式後,因為傳入的是原值得拷貝,所以無論在函式裡如何變化這個引數,原值依然是原值,不會受影響。
arr1是[1,2,3]的引用,arr1賦值給arr2後,arr2也指向了[1,2,3]。此時arr1和arr2同時指向了同乙個陣列值,所以arr2中push了乙個4進來,在arr1中能得到同步反饋。就好像arr1和arr2住在同乙個房間裡,誰對房間([1,2,3])做了一點改變,這個改變將同時影響兩個人。當arr2=[5,6,7,8]後,再顯示arr1和arr2,值不一樣了。這也很好理解,arr2現在成了[5,6,7,8]的引用了,相當於自己找了另外一間房間,做出的改變當然不能再影響到另外乙個人了。再來看下面這段**
公布正確答案,[1,2,3,4]。為什麼不是1314520???還記得前面舉得換房間的例子嗎。把arr當引數傳入的時候,obj也成了[1,2,3]引用,所以第一次push的4的時候,兩者是同在乙個房間的,當obj=[13,14]的時候,說明obj找到了一生一世的所愛,到賓館開房去了,不在同乙個房間了,那後來push進來的520,秀恩愛,跟arr已經沒有關係了。
一圖以蔽之,剛開始兩者指向同乙個數值值,後來其中乙個指向了另乙個陣列。言情一點說,就是剛開始的時候兩個人心向一處([1,2,3]),後來一者見異思遷,心中有了別人([4,5,6]),分手了,相互沒關係了,那輸出的值肯定不一樣呀。
故事到這裡本該結束了,可是簡單值(就是string,number那群屌絲)表示不服氣,為什麼同樣是當引數傳入,復合值可以通過函式改變自身,我們卻不可以,難道屌絲就沒有逆襲的機會嗎?
機會還是要給的,來,請看**。
哈哈,簡單值想通過函式改變,就得曲線救國,先變成物件的得一部分,然後傳入函式,之後再把改變後的值賦值回來。這是我目前能想到的方法。GoLang學習筆記(十八)函式的傳值和傳引用
值傳遞 是指在呼叫函式時將實際引數複製乙份傳遞到函式中,在函式中如果對值進行修改,不會影響到實際引數 引用傳遞 是指在呼叫函式時將實際引數的位址傳遞乙份到函式中,那麼在函式中對引數所進行的修改,將影響到實際引數 嚴格來說go語言只有值傳遞一種傳參方式,go語言是沒有引用傳遞的。go語言中可以借助傳指...
函式的傳值
函式在我看來最主要在於函式引數的傳遞,其餘的與正常程式設計無太大差別 函式引數傳值方式 1.傳數值 2.傳位址 3.引用 引用 型別名 引用名 變數名 相當於乙個變數的別名 int n 4 int r n 在宣告變數語句中作為引用 r 4 coutcout 引用例子 void swap int a,...
PHP的url傳值學習筆記
1.頁面中的原始碼在顯示在瀏覽器的時候,瀏覽器會解釋 html 轉義符號 因此如果要顯示特殊字元,如 等,在原始碼中可以是 2.php在echo進行顯示的時候,如果要顯示 可以這樣處理echo htmlspecialchars htmlspecialchars 可以處理以下字元 ampersand ...