0

我在脚本的主根中设置了变量

var name="blah";

我需要从一个函数中引用它,而无需直接在其参数中传递它。我可以使用“var”初始化程序在全局范围内设置变量,这对我的函数有效。但是,出于类似的原因,我仍然需要知道如何执行此操作。

在 Flash (AS2/AS3) 中,它就像_root.myvar或一样简单_parent.myvar

在 JS 中?

样本:

var name="blah";
var sex="m";
templateMe('name,sex'); // declared the actual NAME of the var not the var itself 

然后.. templateMe 函数简单地使用传递给函数的“字符串”作为变量名及其对应值

意味着“名称”字符串变为

var name=eval(name) 

这是函数的一部分:

vars_r =  vars.split(",");
r_count = vars_r.length;

if(r_count < 1 ){
    return template;
}

var i=0;
var needles = new Array();
var replacements  = new Array();;
for(i=0; i < 2; i++){ //ti <-- use own i counter coz it conflicts w/ global i
    needles.push("{{"+ vars_r[i] + "}}");
    replacements.push( eval( vars_r[i]) );

}

ETC...

希望这现在更有意义

4

2 回答 2

0

全局变量是window对象的属性。因此,如果您需要在一个名为 的字符串变量中有名称时引用全局变量varname,您可以使用window[varname],如下所示:

var foo = 'bar';
var varname = 'foo';
console.log( window[varname] );

打印:

bar

正如 Stephen 指出的那样,可能有更好的方法来解决整体问题,但如果您确实需要以这种方式访问​​全局变量,这种方法可以正常工作。

查看您的代码,我认为您将替换此行:

replacements.push( eval( vars_r[i]) );

和:

replacements.push( window[ vars_r[i] ] );

虽然我不确定我是否理解这段代码在做什么。无论如何,window[varname]都比eval(varname).

于 2013-04-06T06:22:34.270 回答
0

如果我正确理解您的问题,则根本不需要传递变量。

这些变量已经是全局的,因此您可以直接引用它们。

例如:

var value1 = "some value";  /* these variables are global, so you can refer to them from anywhere in your script */
var value2 = 25;            /* ********************************************* */
someFunction();

someFunction 看起来像这样:

function someFunction() {
    var newValue = value2 + 3; 
    alert(newValue); /* Alerts 28. */
    alert(value1); /* Alerts 'some value'. */
}

如果您需要一个学习 JavaScript 的地方,webplatform.org可能是一个不错的起点

希望这可以帮助!

于 2013-04-06T05:51:39.760 回答