title: JS對象(2)值傳遞與引用傳遞
date: 2016-10-05
tags: JavaScript數據結構
咱們須要先回憶一下。code
JavaScript 是一種弱類型或者說動態語言。這意味着你不用提早聲明變量的類型,在程序運行過程當中,類型會被自動肯定。對象
此外,最新的 ECMAScript 標準定義了7中數據類型:ip
6種 原始類型: Boolean
, Null
, Undefined
, Number
, Stirng
, Symbol
內存
一種複雜類型(引用類型)對象: Object
.字符串
JavaScript 一切皆對象(除了6中原始類型)it
在 JS 中,全部除 Object 覺得的類型都是不可變的。好比,JS 中字符串是不可變的,任何對字符串的操做必定返回了一個新字符串,原始字符串並無被改變。io
經過上述的理解要明白 Javascript 中值傳遞與引用傳遞就太簡單了,下面的兩個超級簡單的 demo 能夠詮釋一切。console
// 值傳遞 var a = 2; function foo(b){ b +=10; } foo(a) console.log(a) // 2 // 原始 a 的值沒有發生改變
值傳遞:function
只將值進行傳遞,與原變量無關,值會被複制一份,保存在內存中另外一個不一樣的位置。
當咱們修改傳遞後的值時,修改的是內存中新的位置,而原變量不會被影響,仍是原來的值。
這種狀況每每出如今6中原始類型中。
//引用傳遞 var a = [2]; function foo(b){ b.push(10) } foo(a) console.log(a) // [2, 10] // 原始 a 的值被改變了
引用傳遞:
將內存地址進行傳遞,至關於把原變量完整的傳遞過來。
當咱們修改傳遞後的值時,修改的是內存中原來的位置,會對原變量形成影響。
這種狀況每每出如今對象上。
利用引用傳遞的特性,咱們有了實現面向對象的基礎