以下Javascript函数是按值还是通过引用传递参数?我不确定如何区分这两者

use*_*807 4 javascript reference function

我无法弄清楚通过引用传递和通过值传递的内容(我知道它们在理论上的含义).你能告诉我下面的函数是否通过值ore参考传递参数?BTW这是我的第一篇帖子:)

var number_1 = 32;
var number_2 = 43;

function addition(num1,num2) {
    alert (num1*num2) ;
}

addition(number_1,number_2); /*is this passing by reference?*/
Run Code Online (Sandbox Code Playgroud)

Pra*_*thy 5

原始类型

在javascript中,字符串,布尔值属于基元类别.每当这些类型作为参数传递给函数时,在函数作用域内创建一个单独的副本,这对外部作用域没有影响

例如

var number_1 = 32;
var number_2 = 43;
addition(32,43);
//number_1 is 32 here
//number_2 is 43 here

function addition(number_1,number_2) {
    number_1 += 1; // number_1 is 33
    number_2 += 1; // number_2 is 44
}
Run Code Online (Sandbox Code Playgroud)

参考类型

参考类型略有不同

以下面的例子为例

var obj = new Object();
fn(obj);

function fn(object){
  object.property = "test";
  //obj.property is "test"
  object = new Object();
  object.property = "test 2";
  //obj.property is still "test"
  //obj.property should have changed to "test 2", 
  //if it had been passed by reference
}
Run Code Online (Sandbox Code Playgroud)

如果它是通过引用传递的,obj.property应该在fn中的最后一个语句后更改为"test 2",但它没有.因此,在将参考值传递给函数时,会传递指向该对象的指针的单独副本.