Javascript:我怎样才能创建一个1.接受全局变量作为参数2.更改全局变量的值
Javascript: How can I create a function that 1. accepts a global variable as a parameter 2. alters the value of that global variable?
我正在尝试创建一个函数,该函数接受全局变量作为参数并更改该全局变量的值。这里有一个简单的例子来说明我正在尝试做什么:
var number = 20;
function setnew(num) {
num += 1;
};
setnew(number);
console.log(number) //-> 20
//I want this to return 21
即使在调用了setnew
函数之后,number
也保持不变。有人能解释一下为什么number
保持不变,并提出另一种实现我预期目标的方法吗?
由于Javascript不支持在可以更改原始变量的地方进行真正的引用传递,因此无法直接执行您的要求。通常的解决方法是将全局包裹在对象中。
var myGlobal = {
counter: 0;
};
function increment(obj, prop) {
++obj[prop];
}
increment(myGlobal, "counter");
increment(myGlobal, "counter");
console.log(myGlobal.counter); // 2
或者,如果属性名称已知,您可以这样做:
var myGlobal = {
counter: 0;
};
function incrementCnt(obj) {
++obj.counter;
}
incrementCnt(myGlobal);
incrementCnt(myGlobal);
console.log(myGlobal.counter); // 2
这是因为当您将对象传递给函数时,传递的是指向同一对象的指针(对象不会被复制)。因此,如果您修改该对象上的任何属性,则该对象只有一个副本,因此您正在修改该对象的一个副本上的属性,所有引用该对象的人都将看到该属性的更改。
像数字和布尔值这样的基本体是通过值传递的,它的工作原理就像复制一样,所以原始体永远不会受到函数的影响。
有人能解释为什么
number
保持不变,并提出另一个建议吗如何实现我的既定目标?
将数字传递给函数时,数字的值会复制到一个新变量中,该变量是函数的参数。将该参数的值更改为ONLY函数会影响该参数——它与原始变量完全没有连接。这是因为在Javascript中,基元是通过值传递的,而不是通过引用传递的。因此,根本没有保留任何关于价值来源的参考。当您在函数中收到它时,它是一个独立的新变量。
另一种可能的解决方法是从函数中返回修改后的值,并允许调用者将修改后的数值分配给他们想要的任何值:
var counter = 0;
function increment(val) {
return val + 10;
}
counter = increment(counter);
console.log(counter); // 10
如果传入一个对象而不是基元,则可以更新它。
例如:
var number = { value: 20 };
function setnew(num) {
num.value += 1;
};
setnew(number);
console.log(number.value) //-> 21
基本上,当您传入一个对象时,javascript实际上只传递对变量的引用,而当您传递一个整数时,它将传递值的副本。
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 当 Node.js 中的参数名称相同时,如何从函数访问全局变量
- 使用带有参数 Javascript 的函数更改全局变量
- 更改没有返回和全局变量的“参数变量”
- Javascript 函数参数参数或全局变量
- 自定义 jquery 函数中的参数是否可以更改全局变量的值
- Javascript:我怎样才能创建一个1.接受全局变量作为参数2.更改全局变量的值
- 如何使用jQuery更改全局变量并将其传递给函数的参数
- 通过参数修改函数内部的全局变量
- 匿名函数的参数需要修改并存储在javascript的全局变量中
- 当作为参数传递给setTimeout回调函数时,全局变量被记录为未定义
- 在全局变量中存储mousemove事件参数可能会导致性能问题
- angular作为全局变量和参数的区别
- 在返回之前将参数更新为 JavaScript 回调,而不使用全局变量
- 函数参数可以隐藏全局变量吗?
- 如何在 javascript 中通过引用将全局变量作为参数传递
- 函数可以接受一个参数,并将其声明为全局变量吗?