为什么我的javascript参数没有通过引用传递
Why is my javascript argument not passed "by reference"?
我确信我在这里错过了一些明显的东西,但是我希望changeMe方法的参数是"通过引用"传递的-换句话说,对函数内部参数的更改将改变函数外部的变量。
下面是在jsfiddle中运行的,使用Chrome的F12开发工具来显示控制台输出。http://jsfiddle.net/fzEpa/
var object1 = { Property1: 'Value1' };
changeMe(object1);
console.log(object1);
function changeMe(refToObject) {
console.log(refToObject);
refToObject = { Property1: 'Value2' };
console.log(refToObject);
}
它是通过引用传递的,但它是对对象的引用,而不是对object1
变量的引用(CC_1也是对对象的引用)。
您正在用对新对象的引用覆盖对该对象的引用。
这使得对原始对象的原始引用保持不变。
要修改对象,您可以这样做:
function changeMe(refToObject) {
refToObject.Property1 = 'Value2';
}
对对象的引用作为参数值传递。然而:
refToObject = { Property1: 'Value2' };
此时,您将失去对refToObject
先前引用的对象的引用,因为您将该变量赋值给引用不同的对象。
现在,如果您要编辑refToObject
的属性而不是丢弃前对象引用,您的代码将按预期工作(如@Quentin的回答中首先解释的那样)。
如果你熟悉c++,这将相当于这样做:
void f(int* ref) {
ref = new int(3);
}
int* a = new int(5);
f(a);
printf("%d",a); //Prints 5
您正在尝试重新定义属性1,因此它将无法工作。为了通过引用传递,你必须在ChangeMe()函数中这样做。为了更好地理解Javascript中通过引用传递变量
相关文章:
- 我应该如何从我的javascript中引用DOM元素
- 如何从我的HTML/JavaScript应用程序中引用jQuery
- 我的无引用 JavaScript 对象存在在哪里以及存在多长时间
- Dynamics CRM 2015:如何获得我创建的Web资源按钮,以引用我添加到表单中的Javascript库中的函数
- 为什么我不能引用我的匿名函数
- 如何在填充后从我的模块引用 PreloadJS
- 如何引用我网站上的文档以独立于网站位置和使用位置
- 为什么我的deffered()函数不起作用,除非我引用它的另一个变量
- 如何多次引用我的html5画布绘图
- 为什么我的网站上出现引用错误和语法错误
- 如何引用我在同一项目中编写的库
- 如果我在 if 语句中使用“This”,它将引用选中的值
- 为什么每次单击空链接时都会引用我的页面
- 有没有快捷方式可以引用我的 DIV 中的元素
- 无法引用我的 JQuery 原型类上的方法
- 我应该如何包含和引用我的JavaScript文件
- 可以't引用我的JSON对象中的元素
- 访问& # 39;这个# 39;回调函数内部应该引用我的数组
- 我如何得到一个引用我的HTML元标签
- javascript:如何构建一个函数来引用我的Quiz应用程序中的变量