在Javascript中通过引用访问变量

5

我想在JavaScript中传递一个变量的引用,并更新该变量的内容,这是否可行?例如,以下是一个简单(失败)的示例...

var globalVar = 2;

function storeThis ( target, value ) {
    eval(target) = value;
}

storeThis( 'globalVar', 5);
alert('globalVar now equals ' + globalVar);

当然,这并不起作用,有人可以帮忙吗?
3个回答

4

Eval不返回任何值。

这个可以正常工作:

window[target] = value;

(然而,你没有传递引用,而是传递了变量名)

digitalfresh 是正确的,eval 用于语句的评估,所以你可能需要创建一个,例如 eval("window."+ target + "= " + value + ";"); 但要小心递归过深。 - Ifi
是的,但为什么要使用eval呢?这绝对不是少数几种适合使用eval的情况之一。 - jasongetsdown
太棒了!谢谢LFI和DigitalFresh,这太管用了。 - Julian Young
仍然开放给更好的方式,jasongetsdown! - Julian Young

3
在这种情况下,storeThis 中的代码已经可以访问 globalVar ,因此无需将其传递进来。
你的示例与以下示例完全相同:
var globalVar = 2;

function storeThis(value) {
    globalVar = value;
}

storeThis(5);

您想要做什么?

在Javascript中,标量不能通过引用传递。如果需要这样做,请使用Number类型或创建自己的对象,例如:

var myObj = { foo: 2 };

2
如果您真的想使用eval,您可以使用以下代码:
```javascript var globalVar = 2; ```
function storeThis( target, value ) {
    eval( target + ' = ' + value );
}

storeThis( 'globalVar', 5 );
alert('globalVar now equals ' + globalVar);


在这种情况下,如果value是一个字符串,eval()将把它视为变量(如果它是一个单词),无效代码(如果它是多个javascript不理解的单词)或表达式(如果它是一个有效的javascript表达式)。 - Ryan Kinal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接