亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

函數入參的傳遞

函數入參的傳遞

元芳怎么了 2019-03-12 16:15:06
// [1]var arr = [1, 2]function change(arr) {  arr = [1, 2, 3]}change(arr)console.log(arr) // => [1, 2]// [2]var arr = [1, 2]function change(arr) {  arr.push(3)}change(arr)console.log(arr) // => [1, 2, 3]按照《JavaScript 高級程序設計》中的說法:基本類型值的傳遞如同基本類型變量的復制一樣。引用類型值的傳遞則如同應用類型變量的一樣為什么賦值不會改變外部 arr,而 push 方法則會改變外部 arr 的值呢?友情鏈接:[sof] Is JavaScript a pass-by-reference or pass-by-value language?
查看完整描述

3 回答

?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

在調用函數change的時候,change這個函數的作用域內會有一個新的變量arr,這個arr全局的arr都指向同一個內存地址,即存儲數組[1, 2]的內存地址。

代碼段一執行arr = [1, 2, 3],也就是在內存中存儲一個新的數組[1, 2, 3],然后把這個數組的內存地址賦值給arr,注意這個arrchange函數內的變量,所以這個arr指向數組[1, 2, 3]的內存地址,而全局的arr仍然指向[1, 2]的內存地址。注意[1, 2, 3]是一個新的數組,所以需要一個新的內存空間。

代碼段二執行arr.push(3),首先會找到arr指向的數組,也就是[1, 2],然后往這個數組中添加數據3,因為change函數內的arr全局的arr指向的是同一個內存地址,而這個地址指向的內容已經改變了。


查看完整回答
反對 回復 2019-03-30
?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

有參函數實際上有一個隱式的變量聲明,第一函數,改變的是局部變量的指向地址。第二個函數中局部變量指向和全局變量是同一個地址對象,所以結果不一樣。


查看完整回答
反對 回復 2019-03-30
  • 3 回答
  • 0 關注
  • 566 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號