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,并不会修改原值。因此第二个和第三个例子其实都是按共享传递。
 
注意: 按引用传递是传递对象的引用,而按共享传递是传递对象的引用的副本!
 
最后,能够这样理解:
参数若是是基本数据类型能够按值传递,若是是引用类型,按照共享传递。
相关文章
相关标签/搜索