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

时间:2014-08-13 01:40:13

标签: javascript function reference

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

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?*/

2 个答案:

答案 0 :(得分: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
}

参考类型

参考类型略有不同

采取以下示例

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
}

如果通过引用传递,obj.property应该已经更改为"测试2"在fn里面的最后一个声明之后,但它没有。 因此,在将参考值传递给函数时,会传递指向该对象的指针的单独副本。

答案 1 :(得分:-1)

在javascript中,每个变量都是通过值传递而不是引用,但对象有一个例外。对象是引用(like it was answered here)。

这意味着在将“em”作为参数放入函数后,数字,字符串,布尔值或函数根本不会发生变化。但是如果在函数内部更改了对象或数组中的属性和元素,则它们会发生变化。

这是一个例子


简单变量

function nullify(a) 
{
   a = null;
}

var myVariable = 123;
nullify(myVariable); // myVariable still equals to 123

对象

function changeProperty (obj)
{
   obj.key = null;
}

var myObject = new Object();
myObject.key = "value";
changeProperty(myObject); // the property key is null after calling the function

阵列

function changeArray (Arr)
{
   Arr[0] = null;
}

var myArray = [1,2,3];
changeArray(myArray); // now the value of myArray is [null,2,3]