【问题标题】:Modify global variable inside function via parameter通过参数修改函数内部的全局变量
【发布时间】:2017-03-08 02:30:44
【问题描述】:

这是一个例子:

let wish = 'Happy birthday!';

function translate(msg) {
  msg = 'Alles Gute zum Geburtstag!';
}

translate(wish);
console.log(wish);

我意识到它不会修改wish,因为 JavaScript 是“按值传递”而不是“按引用传递”,所以我如何通过将值传递给功能?如果不将wish 更改为对象或数组来保存我的字符串而不是原语,是否不可能?

【问题讨论】:

  • 设置一个对象可能是最好的方法,因为全局变量是不受欢迎的,但如果你想用 vars 来做,那么我的答案就是你的确切解决方案。
  • eval 可以,但不是真正的解决方案。

标签: javascript function variable-assignment


【解决方案1】:

使用对象代替全局变量。

let wish = {
  msg: 'Happy birthday!'
};

function translate(obj) {
  obj.msg = 'Alles Gute zum Geburtstag!';
}

translate(wish);
console.log(wish.msg);

【讨论】:

  • 所以我不能用wish 作为原语吗?
  • 没有。只有其他方法是使用函数来设置值,但这会比对象更糟糕。 translate(function (newMsg) { wish = newMsg; })
  • 您能否将我链接到一些支持您的“否”的文档?
【解决方案2】:
let wish = 'Happy birthday!';

function translate(msg) {
   msg = 'Alles Gute zum Geburtstag!';
   return wish=msg;
}

translate(wish);
console.log(wish); //Alles Gute zum Geburtstag!

您不必使用 return,但可以在较小范围内没有同名 var 的任何地方设置全局变量。

【讨论】:

  • 我意识到我可以在函数中静态引用变量,但这违背了函数的目的。
  • @jsejcksn 函数的要点是以更多周期为代价使用更少的内存。因此,只要您多次使用该功能,就不会违背该功能的目的。如果您只使用一次,请不要使用函数。
  • 我认为我的问题的措辞可能不清楚。我会再考虑一下。
猜你喜欢
  • 1970-01-01
  • 2017-01-23
  • 2020-11-03
  • 1970-01-01
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-03
相关资源
最近更新 更多