将全局变量的引用传递给函数
Passing a reference of a global variable to a function
是否可以将 link 的全局变量发送给 JavaScript 中的函数?
This answer 说不,但我不敢相信,没有解决方法。
我的意思是像下面这样。它不起作用,但它会解释我的意思:
var data_1;
var data_2;
fillValue(data_1,"First");
fillValue(data_2,"Second");
function fillValue(link2GlobalVar, value){
link2GlobalVar = value;
}
console.log(data_1);
console.log(data_2);
如果能在控制台输出就好了
First
Second
你知道将全局变量发送到函数并像这样在其中更改它们的技巧吗?
JavaScript 没有像其他语言那样的引用。当您执行 fillValue(data_1,"First");
时,您将按值传递 data_1
。因此,您无法更新 data_1
,因为在该函数中,您所拥有的只是数据的 copy。
如果这些变量是 global,那么您可以按照链接答案的建议进行操作并传递变量名称:
fillValue("data_1", "First");
fillValue("data_2", "Second");
function fillValue(link2GlobalVar, value){
window[link2GlobalVar] = value;
}
更新:
在JavaScript中,如果你传递一个对象作为参数,那么它实际上是通过引用传递的。你可以尝试这样的事情:
var datas = {};
fillValue(datas, "data_1", ,"First");
fillValue(datas, "data_2", "Second");
function fillValue(obj, key, value){
obj[key] = value;
}
原始值不是通过引用传递的。
对象是。
如果您将全局变量包装在一个对象中,您将能够从一个函数修改它的属性:
var data_1 = {};
var data_2 = {};
fillValue(data_1,"First");
fillValue(data_2,"Second");
function fillValue(link2GlobalVar, value){
link2GlobalVar.value = value;
}
document.write(data_1.value + "<br/>" +data_2.value);
除此之外,this
应该比 window
更便携。 (适用于浏览器和 nodejs
)。如果处于严格模式,则不能在函数内部(未使用 new 调用)使用它,但可以在全局范围内使用它以获取对全局范围的引用。
"use strict";
var data_1;
var data_2;
var global = this; //get a reference to the global object
fillValue("data_1","First");
fillValue("data_2","Second");
function fillValue(globalVariableName, value){
//`this` instead of `global` would work here only if you're not in strict mode
global[globalVariableName] = value;
}
document.write(data_1 + "<br/>" +data_2);
这个问题看起来有点疯狂,但您可以将全局名称作为字符串传递,然后使用 eval 进行设置:
function blah(nameAsString, val){ eval("window." + name + " = " + val);}
更疯狂! :)
是否可以将 link 的全局变量发送给 JavaScript 中的函数? This answer 说不,但我不敢相信,没有解决方法。
我的意思是像下面这样。它不起作用,但它会解释我的意思:
var data_1;
var data_2;
fillValue(data_1,"First");
fillValue(data_2,"Second");
function fillValue(link2GlobalVar, value){
link2GlobalVar = value;
}
console.log(data_1);
console.log(data_2);
如果能在控制台输出就好了
First
Second
你知道将全局变量发送到函数并像这样在其中更改它们的技巧吗?
JavaScript 没有像其他语言那样的引用。当您执行 fillValue(data_1,"First");
时,您将按值传递 data_1
。因此,您无法更新 data_1
,因为在该函数中,您所拥有的只是数据的 copy。
如果这些变量是 global,那么您可以按照链接答案的建议进行操作并传递变量名称:
fillValue("data_1", "First");
fillValue("data_2", "Second");
function fillValue(link2GlobalVar, value){
window[link2GlobalVar] = value;
}
更新: 在JavaScript中,如果你传递一个对象作为参数,那么它实际上是通过引用传递的。你可以尝试这样的事情:
var datas = {};
fillValue(datas, "data_1", ,"First");
fillValue(datas, "data_2", "Second");
function fillValue(obj, key, value){
obj[key] = value;
}
原始值不是通过引用传递的。 对象是。
如果您将全局变量包装在一个对象中,您将能够从一个函数修改它的属性:
var data_1 = {};
var data_2 = {};
fillValue(data_1,"First");
fillValue(data_2,"Second");
function fillValue(link2GlobalVar, value){
link2GlobalVar.value = value;
}
document.write(data_1.value + "<br/>" +data_2.value);
除此之外,this
应该比 window
更便携。 (适用于浏览器和 nodejs
)。如果处于严格模式,则不能在函数内部(未使用 new 调用)使用它,但可以在全局范围内使用它以获取对全局范围的引用。
"use strict";
var data_1;
var data_2;
var global = this; //get a reference to the global object
fillValue("data_1","First");
fillValue("data_2","Second");
function fillValue(globalVariableName, value){
//`this` instead of `global` would work here only if you're not in strict mode
global[globalVariableName] = value;
}
document.write(data_1 + "<br/>" +data_2);
这个问题看起来有点疯狂,但您可以将全局名称作为字符串传递,然后使用 eval 进行设置:
function blah(nameAsString, val){ eval("window." + name + " = " + val);}
更疯狂! :)