JavaScript參數按值傳遞

JavaScript參數按值傳遞javascript

  1. ECMAScript中全部函數的參數都是按值傳遞
 
什麼是按值傳遞呢?
  1. 也就是說,把函數外部的值複製給函數內部的參數,就和把值從一個變量複製到另外一個變量同樣。
var value = 1

function foo(value){
    value = 2
    console.log(value) // 2
}
foo(value)
console.log(value) // 1

當傳遞value到函數foo中,至關於拷貝了一份value,假設拷貝的這份叫_value,函數中修改的都是_value的值,而不會影響原來的value的值

引用傳遞?java

  1. 若是值是一個複雜的數據結構,拷貝(值傳遞)就是產生性能影響
  2. 引用傳遞,就是傳遞對象的引用,函數內部對參數的任何改變都會影響原有對象的值,由於二者引用的是統一地址。
var obj = {
    value : 1
}

function foo(obj){
    obj.value=2
    console.log(obj.value)// 2
}
foo(obj)
console.log(obj.value)// 2

上面說了ECMAScript中全部函數的參數都是按值傳遞,怎麼能按引用傳遞成功呢數據結構

共享傳遞
var obj = {
    value : 1
}
function foo(obj){
    obj = 2 
    console.log(obj)// 2
}
foo(obj)
console.log(obj.value)// 1

若是JavaScript採用的是引用傳遞,外層的值也會被修改。函數

因此修改 o.value,能夠經過引用找到原值,可是直接修改 o,並不會修改原值。因此第二個和第三個例子其實都是按共享傳遞。
 
注意: 按引用傳遞是傳遞對象的引用,而按共享傳遞是傳遞對象的引用的副本!
 
最後,能夠這樣理解:
參數若是是基本數據類型能夠按值傳遞,若是是引用類型,按照共享傳遞。
相關文章
相關標籤/搜索