通过内部函数监听局部变量

时间:2017-12-28 09:20:24

标签: javascript closures



function init() {
  var name = "Breaking Bad";
  function getName() {
    console.log(name);
  }
  function setName(newName) {
    name = newName;
  }
  return {
    getName: getName,
    setName: setName
  };
}

const sayMyName = init().getName; // during initialization
init().setName('Heisenberg'); // can be updated multiple times later
sayMyName(); // isn't latest i.e. NOT Heisenberg




可以做些什么才能使getName获得最新的name

PS:我试过,但是在阅读了关于内部函数,闭包等的许多答案后,却无法在stackoverflow上找到解决方案。

1 个答案:

答案 0 :(得分:8)

  PS:我试过了,但之后无法在stackoverflow上找到解决方案   阅读关于内部函数,闭包等的许多答案。

因为当你做到了

init().setName('Heisenberg'); 

您最终将名称设置为init()的其他引用,因为每次您调用init时,它都会返回getNamesetName的不同引用。

成功



function init() {
  var name = "Breaking Bad";
  function getName() {
    console.log(name);
  }
  function setName(newName) {
    name = newName;
  }
  return {
    getName: getName,
    setName: setName
  };
}
var init1 = init(); //save the initialization
var sayMyName = init1.getName; 
init1.setName('Heisenberg'); // can be updated multiple times later
sayMyName();