【问题标题】:Change value of passed variable in Javascript without return?在Javascript中更改传递变量的值而不返回?
【发布时间】:2013-03-21 16:06:32
【问题描述】:

我有一个函数change(x),它接受一个整数并改变它的值

function change(x) {
   x=26;
}

然后我创建一个变量并尝试更改它的值

window.onload=function(){
   var a = 10;
   change(a);
   console.log(a);
}

a 并没有像我预期的那样改变。是否可以在不使用 return 的情况下以简单的方式在 JavaScript 中实现此行为?我宁愿避免使用对象和全局变量。

这是我的全部代码:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
   <script>
   function change(x) {
      x=26;
   }
   window.onload=function(){
      var a = 10;
      change(a);
      console.log(a);
   }
   </script>
</body>
</html>

【问题讨论】:

标签: javascript pass-by-reference


【解决方案1】:

我这样做了,它奏效了:

function change(x) {   
  x=26;  
  return x;  
}  
  window.onload=function(){  
  var a = 10;  
  console.log(change(a));  
}

希望对你有帮助

【讨论】:

  • window.onload 函数末尾添加console.log(a) 证明你错了。
【解决方案2】:

您不能像这样(或根本不能)通过引用传递变量。你可以做的是传递一个对象并修改它的属性:

function change(obj) {
    obj.a = 4;
}

var obj = {a: 0};
change(obj);

// obj.a is "4" now

【讨论】:

    【解决方案3】:

    JavaScript 总是按值传递参数,所以你不能像你最初写的那样做。

    然而,一个对象的值是一个引用,所以你可以使用一个对象。

    但是,对于这个用例来说,这会让人感到困惑。您应该让该函数返回转换后的数字。

    【讨论】:

    • 问题是我的“更改”函数内部有一个回调函数,因此我无法返回值。然后我得到“未定义”。
    • @Pithikos 你应该使用回调函数。
    • "但是,一个对象的值是一个引用" 你的意思是,一个变量的值是一个引用,它指向一个对象。
    猜你喜欢
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 2013-04-04
    • 2011-12-27
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多