我不知道按引用传递和按值传递是什么样子的(我知道它们在理论上的意义)。你能告诉我下面这个函数是按值传递还是按引用传递参数吗?顺便说一句,这是我的第一篇文章 :)
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?*/
我不知道按引用传递和按值传递是什么样子的(我知道它们在理论上的意义)。你能告诉我下面这个函数是按值传递还是按引用传递参数吗?顺便说一句,这是我的第一篇文章 :)
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?*/
原始类型
在JavaScript中,数字、字符串和布尔值属于原始类型(primitives)。当这些类型作为参数传递给函数时,函数内部会创建一个副本,不会影响外部作用域。
例如:
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
应该在fn内的最后一条语句后更改为"test 2",但实际上没有发生变化。因此,在将引用值传递给函数时,会传递指向对象的指针的单独副本。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]
var x = {}; nullify(x);
这个例子的相反情况。 - Ry-