我无法弄清楚通过引用传递和通过值传递的内容(我知道它们在理论上的含义)。你能告诉我下面的函数是否通过值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?*/
答案 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]