1

我有三个变量

var r1 = 12;
var r2 = '';
var r3;

我需要制作一个convert()具有三个参数的函数,如下所示:

function convert(arg1, arg2, arg3) {
    // function body here
}

这样在我运行这段代码之后

convert(r1, r2, r3)
console.log(r1, r2, r3)

我应该得到输出:

r2, "empty string", "undefined value"

即应将 r1、r2 和 r3 的值更改为上述值。

我试过的代码:

function convert(arg1, arg2, arg3) {
  if (arg2 === '') {
    arg2 = "empty string";
  }
  if (arg3 === undefined) {
    arg3 = "undefined value";
  }
}

然后调用convert(r1, r2, r3)它失败(显然!)因为参数作为值传递。但我需要知道有没有办法实现这个功能?另外,我已经看到了这个问题,所以我知道它们是如何通过的,但是,有什么办法可以使这个工作吗?

4

4 回答 4

0

你不能在 JavaScript 中做到这一点。它没有传递引用语义。

您可以为此使用中间对象,但似乎这不是您想要的:

var data = {r1: 12, r2: '', r3: undefined};
function convert(data, field1, field2, field3) {
    // …
}
于 2013-05-31T07:40:22.837 回答
0

你可以做这样的事情,但很可能你的逻辑有缺陷。

function convert(arr) {
    for (var i = 0, l = arr.length; i < l; i++) {
        // do your stuff here on arr[i]
    }
    return arr;
}

var a = convert([r1, r2, r3]);
//a now holds the right values, do whatever you want with them
//you can even load them back to the variables if that's what you really want
//r1 = a[0]; etc.

我不知道这样做的原因是什么,你想在哪里使用这些新值,但是只为一个值编写转换函数并在必要时调用它会更聪明。

function convert(val) {
    if (val === '') {
        return 'empty string';
    }
    if (typeof val === 'undefined') {
        return 'undefined value';
    }
    return val;
}

console.log(convert(r1));
于 2013-05-31T07:41:10.153 回答
0

万一您只想转换全局变量,您可以传入这些变量的名称:

function convert(arg1, arg2, arg3) {
  if (window[arg2] === '') {
    window[arg2] = "empty string";
  }
  if (window[arg3] === undefined) {
    window[arg3] = "undefined value";
  }
}

var r1 = 12;
var r2 = '';
var r3;
convert('r1', 'r2', 'r3');
console.log(r1, r2, r3);
于 2013-05-31T11:01:32.310 回答
-1

工作代码:在您需要的事件上触发执行功能


function execute(){
    var r1 = 12;
    var r2 = '';
    var r3;
    convert(r1,r2,r3);
}

function convert(arg1, arg2, arg3) {
  if (arg2 === '') {
    arg2 = "empty string";
  }
  if (arg3 === undefined) {
    arg3 = "undefined value";
  }

  console.log(arg1,arg2,arg3);
//    console.log(arg2);
  //    console.log(arg3);

}
于 2013-05-31T07:54:56.820 回答