我读过类似的主题,但找不到答案。
以下是代码:
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;
它无效。为什么以及如何做到这一点?
答案 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)}
}