在Javascript中通过引用传递变量
如何在JS中通过引用传递变量? 我有3个变量,我想执行几个操作,所以我想把它们放在一个for循环中,并对每一个执行操作。
伪代码:
myArray = new Array(var1, var2, var3);
for (var x = 0; x < myArray.length; x++){
//do stuff to the array
makePretty(myArray[x]);
}
//now do stuff to the updated vars
做这个的最好方式是什么?
JavaScript中没有“通过引用传递”。 你可以传递一个对象(也就是说,你可以传递一个对象的引用值),然后有一个函数修改对象的内容:
function alterObject(obj) {
obj.foo = "goodbye";
}
var myObj = { foo: "hello world" };
alterObject(myObj);
alert(myObj.foo); // "goodbye" instead of "hello world"
现在,就你而言,就我所知,你无论如何都不会传递任何东西。 如果需要,可以使用数字索引遍历数组的属性并修改数组的每个单元格。
重要的是要注意“传递参考”是一个非常具体的术语。 这并不意味着可以将引用传递给可修改的对象。 相反,这意味着可以通过一个简单的变量来允许函数在调用上下文中修改该值。 所以:
function swap(a, b) {
var tmp = a;
a = b;
b = tmp; //assign tmp to b
}
var x = 1, y = 2;
swap(x, y);
alert("x is " + x + " y is " + y); // "x is 1 y is 2"
在像C ++语言,有可能这样做,因为这种语言做 (排序的)有传址引用。
编辑 - 最近(2015年3月)再次在Reddit上爆出一篇类似于我下面提到的博客文章,尽管在这种情况下关于Java。 我在阅读Reddit的评论后发现,很大一部分的混淆源于涉及“参考”一词的不幸碰撞。 术语“通过引用传递”和“按值传递”早于在编程语言中使用“对象”的概念。 这根本不是关于物体的; 它是关于函数参数的,特别是函数参数如何“连接”(或不)到呼叫环境。 特别要注意的是,在一个真正的传递引用语言中 - 一个涉及对象的语言 - 人们仍然可以修改对象内容,并且它看起来非常像它在JavaScript中的样子。 但是,也可以在调用环境中修改对象引用,这是您在JavaScript中无法做到的关键。 通过引用的语言不会传递引用本身,而是引用引用。
编辑 - 这里是关于这个话题的博客文章。 (请注意那篇文章的评论,它解释了C ++并没有真正的传递引用,这是真的,但是C ++确实有能力创建对普通变量的引用,或者明确地在函数调用来创建一个指针,或者在调用其参数类型签名要求完成的函数时隐式地执行,这些是JavaScript不支持的关键事项。)
数组和对象通过引用或基于这些条件的值进行传递:
如果您正在设置对象或数组的值,则它是按值传递的。
object1 = {prop: "car"}; array1 = [1,2,3];
如果您正在更改对象或数组的属性值,那么它是Pass By Reference。
object1.prop = "car"; array1[0] = 9;
码
function passVar(obj1, obj2, num) {
obj1.prop = "laptop"; // will CHANGE original
obj2 = { prop: "computer" }; //will NOT affect original
num = num + 1; // will NOT affect original
}
var object1 = {
prop: "car"
};
var object2 = {
prop: "bike"
};
var number1 = 10;
passVar(object1, object2, number1);
console.log(object1); //output: Object {item:"laptop"}
console.log(object2); //output: Object {item:"bike"}
console.log(number1); //ouput: 10
解决方法像引用一样传递变量:
var a = 1;
inc = function(variableName) {
window[variableName] += 1;
};
inc('a');
alert(a); // 2
编辑
烨,其实你可以做到这一点没有访问全球
inc = (function () {
var variableName = 0;
var init = function () {
variableName += 1;
alert(variableName);
}
return init;
})();
inc();
链接地址: http://www.djcxy.com/p/3531.html