我有一个函数,返回一个variablefunction来编辑变量值。

但这不起作用,我也不知道为什么。

正确的方法是什么?

这是我的代码:

function t(){
  var test = 1;

  var changeTest = function(){
    test++;
  }

  return {
    changeTest:changeTest,
    test:test
  }
}

var b = t();
b.changeTest();
console.log(b.test) // the value is 1 not 2

最佳答案

test的值是原始值,因此它实际上不是引用。

解决方案:将公开的test属性设置为吸气剂,以便在访问该属性时检索私有test变量的值:

return {
  changeTest:changeTest,
  get test() { return test }
}




function t(){
  var test = 1;

  var changeTest = function(){
    test++;
  }

  return {
    changeTest,
    get test() { return test }
  }
}

var b = t();
b.changeTest();
console.log(b.test);





在这种模式下,test变量保持私有状态,并且只公开您想要的功能。因此,在这种情况下,您允许显式读取test值,但不能写入它。

注意:您可以将对象文字表示法缩短为:

  return {
    changeTest,
    get test() { return test }
  }

关于javascript - JavaScript通过引用返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59124980/

10-12 12:53
查看更多