如何在函数中设置全局变量

时间:2011-03-02 16:28:32

标签: javascript

我读过类似的主题,但找不到答案。

以下是代码:

foo_arr = ["a", "b", "c"]
bar_arr = ["x", "y"]

test(bar_arr);
document.write(bar);

function test(arr_name) {
    bar = Math.random()*arr_name.length;

    if (bar < 1) {test(arr_name)}
}

正如您所看到的,我将数组名称传递给函数,但是如果我还需要传递变量呢?例如

test(bar, bar_arr);

function test(var_name, arr_name) {
    var_name = Math.random()*arr_name.length;

它无效。为什么以及如何做到这一点?

3 个答案:

答案 0 :(得分:6)

您不能在JavaScript中传递(引用)变量,只能传递它们的值。即使使用bar_arr,您也只传递数组的“值”,这是一个对象 - 您可以通过这种方式修改对象的属性,但不能自己更改bar_arr

要真正“传递”变量,请将上述技巧退一步,并使用包含变量的对象作为属性。在这种情况下,这是window对象,其中所有全局变量都是属性:

function test(var_name) {
  window[var_name] = 'foo';
}

test('bar'); // note that the property name is a string, not a variable
alert(bar); // now the global 'bar' is set

答案 1 :(得分:2)

如果您只想设置一个全局变量的值,您可以从您的函数中返回所需的值:

function test(arr_name) {
    return Math.random()*arr_name.length;
}

bar = test(bar_arr);

我真的不确定这是你想做什么,但如果我能够提供帮助,我很高兴。

答案 2 :(得分:0)

如果var_name是全局变量,您仍然可以在function test内访问它。 例如:

var_name; // global
function test(arr_name) {
    var_name = Math.random()*arr_name.length;  // still accessible here

    if (bar < 1) {test(arr_name)}
}