【问题标题】:Javascript global function setting local variableJavascript全局函数设置局部变量
【发布时间】:2011-04-06 16:53:52
【问题描述】:

为什么返回 'foo' 而不是 'foobar'?我需要函数 g 来修改(非全局)var v,但函数 g 是一个全局函数。谢谢。

f();

function f() {
  var v = 'foo';
  g(v);
  alert(v);
}

function g(v) {
  v = v+'bar';
  return v;
}

【问题讨论】:

    标签: javascript global-variables


    【解决方案1】:

    因为你从 g(v) 调用返回 v 但你没有重新分配 v

    f();
    
    function f() {
      var v = 'foo';
      v = g(v);  //you need to assign what is returned
      alert(v);
    }
    
    function g(v) {
      v = v+'bar';
      return v;
    }
    

    【讨论】:

      【解决方案2】:

      因为 javascript 仅按值起作用,而不是按引用起作用。请参阅 John Hartsock 的回答。

      【讨论】:

        【解决方案3】:

        Primitive javascript 中的所有参数(在本例中为 g 的字符串参数)都是按值传递而不是按引用传递,这意味着您正在使用 v函数 g(v) 中的 with 是函数 f 中 v 的副本。

        Edit: 所有参数都按值传递,而不仅仅是原语。

        【讨论】:

        • 所有 JavaScript 中的参数都是按值传递的。
        • 我的错,你是对的。非基元也按值传递,但您可以修改它们的属性。
        • 是的。这是一个非常频繁出现的论点,但关键是术语“按引用调用”(当然就像“按值调用”)具有非常具体的含义,并且值可以引用的事实对象是混淆的常见来源。太糟糕了,他们没有把它叫做“call-by-back-pointer”之类的:-)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-04
        • 1970-01-01
        • 1970-01-01
        • 2013-10-21
        相关资源
        最近更新 更多