按值傳遞和按引用傳遞

按值傳遞 VS. 按引用傳遞

按值傳遞(call by value)是最常用的求值策略:函數的形參是被調用時所傳實參的副本。修改形參的值并不會影響實參。

按引用傳遞(call by reference)時,函數的形參接收實參的隱式引用,而不再是副本。這意味著函數形參的值如果被修改,實參也會被修改。同時兩者指向相同的值。

按引用傳遞會使函數調用的追蹤更加困難,有時也會引起一些微妙的BUG。

按值傳遞由于每次都需要克隆副本,對一些復雜類型,性能較低。兩種傳值方式都有各自的問題。

例子:

按值傳遞

function change(num){
  // 這里對num這個變量創(chuàng)建了一個內存的副本
  var num=num+1;
  return num;
}
var num=1;
console.log("內部的",change(num)); //2
console.log("外部的",num);  //1

按引用傳遞

var obj={
  name:"xiaoming"
}
function change2(obj){
//當前obj對內存的這個地址指向同一個
  obj.age=20;
  console.log("內部的",obj)
}
change(obj)
console.log("外部的",obj)
//內部的{name:"xiaoming,age:20}
//外部的{name:"xiaoming,age:20}

按引用傳遞:object,array(js對象)
按值傳遞:string,number,boolean

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容