【问题标题】:JS function not updating an objectJS函数不更新对象
【发布时间】:2015-09-02 04:03:45
【问题描述】:

我已经简化了一个我一直在处理的函数,但是当函数运行时,console.log 仍然等于 0。我做错了什么会导致对象不更新?

var x = { y: 0 };

var z = 5;

function addStrokesToScore(a, b) {
 a += b;
}

addStrokesToScore(x.y, z);

console.log(x.y);

【问题讨论】:

    标签: javascript function object


    【解决方案1】:

    addStrokesToScore(x.y, z)x.yz 传递到函数中,它不传递对属性/变量的引用。您不能更改函数内的属性/变量;没有返回链接。

    这里的正常情况是返回新值:

    function addStrokesToScore(a, b) {
      return a + b;
    }
    
    x.y = addStrokesToScore(x.y, z);
    

    或者,您可以传入对x 对象的引用,并使用该引用更新其y 属性:

    function addStrokesToScore(obj, b) {
      obj.y += b;
    }
    
    addStrokesToScore(x, z);
    

    但一般来说,除非有充分的理由,否则您应该改用 return 选项。

    【讨论】:

      【解决方案2】:

      问题是您传递的是值而不是对象引用:

      var x = {
        y: 0
      };
      
      var z = 5;
      
      function addStrokesToScore(o, b) { //note
        o.y += b; //note
      }
      
      addStrokesToScore(x, z); //note
      
      alert(x.y);

      【讨论】:

        【解决方案3】:

        您正在传递一个不可变的数字。您需要传递对整个对象的引用:

        var x = { y: 0 };
        
        var z = 5;
        
        function addStrokesToScore(a, b) {
         a.y += b;
        }
        
        addStrokesToScore(x, z);
        
        console.log(x.y);
        

        【讨论】:

          【解决方案4】:

          没有地方更新 x.y,您只是将它传递给 fn 并在 fn 局部变量“a”中更新。

          您可以添加x.y+=b;

          或在函数中添加 return a 并将您的调用语句设为x.y=addStrokesToScore(x.y, z);

          【讨论】:

            【解决方案5】:

            通过传递 x.y 你传递的值是 0 而不是引用。使用这个-

            var x = { y: 0 };
            
            var z = 5;
            
            function addStrokesToScore(a, b) {
                 a.y += b;
            }
            
            addStrokesToScore(x, z);
            
            console.log(x.y);
            

            http://jsfiddle.net/pgwkuaq5/

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-02-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-01-25
              • 2021-07-07
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多