繁体   English   中英

将全局变量的引用传递给函数

[英]Passing a reference of a global variable to a function

是否可以将全局变量的链接发送到JavaScript中的函数? 这个答案说不,但我不敢相信,没有解决方法。

我的意思是如下所示。 它没有用,但它应该解释我的意思:

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因为在该功能中,您拥有的只是数据的副本

如果这些变量是全局变量,那么您可以执行链接的答案建议并传递变量名称:

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上都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);}

更疯狂! :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM