下面的Javascript函数是通过值还是通过引用传递参数?我不知道如何区分这两者
Is the below Javascript function being passed arguments by value or by reference? I'm not sure how to distinguish between the two
我不能弄清楚什么是按引用传递和按值传递(我知道它们在理论上是什么意思)。你能告诉我下面的函数是否通过值或引用传递参数吗?顺便说一下,这是我的第一篇文章:)
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中,数字,字符串,布尔值属于基本类型。当这些类型作为参数传递给函数时,在函数作用域中创建一个单独的副本,对外部作用域
没有影响。例如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",但它没有。因此,当向函数传递引用值时,将传递指向该对象的指针的单独副本。
在javascript中,每个变量都是通过值而不是引用传递的,但对于对象有一个例外。对象是引用(就像这里回答的那样)。
意味着一个数字,一个字符串,一个布尔值或一个函数在你把它们作为一个函数的参数后不会改变。但是,对象或数组中的属性和元素如果在函数中被更改,则会发生变化。
下面是一个例子
简单变量
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]
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]
相关文章:
- 元素在我的代码中不会.fadeTo.Don'I don’我不知道;s错误的JavaScript、JQuery、H
- Steam Web API:I'我不知道该如何处理这个看起来像哈希的url来生成图像
- 这个旋钮没有更新;我不知道为什么
- 我不知道为什么我的代码是错误的?又有什么错
- 我不知道我的编码有什么问题.(JavaScript)
- I'我不知道为什么我的代码没有'不起作用
- sqlite查询返回错误-can'我不知道为什么
- 我不知道此代码中的这些符号是什么意思.十进制到二进制
- 我不知道如何正确地将REST响应对象传递给ReactJS子组件
- 我没有'我不知道为什么我的jqGrid子网格没有'不要给我看数据
- 如何为javascript创建自定义标签?或者这是我不知道的其他事情吗;我不知道
- 我已经用javascript制作了一个幻灯片,但我不知道如何让我的照片发呆
- 我的函数不起作用,Ajax调用,JQuery,调用外部?我不知道
- 单选按钮验证:我可以验证它,但我不知道原因
- 当我没有'我不知道关键值
- 我的素数函数坏了,但我没有;我不知道为什么
- 我得到了这个错误,但是不要;我不知道如何修复它,www.example.com/undefined?1460018627
- 可以'我不知道如何使用谷歌图表API显示2个表
- 可以'我不知道李是在徘徊
- 当我从struts2操作在js函数中获得JSONArray时,它是空的,我不知道为什么