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

Kay*_*ast 0 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
Run Code Online (Sandbox Code Playgroud)

什么可以做到getName最新name

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

gur*_*372 8

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

因为当你做到了

init().setName('Heisenberg'); 
Run Code Online (Sandbox Code Playgroud)

您最终将名称设置为不同的引用,init()因为每次调用init它时都会返回不同的getName和的引用setName.

做了

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();
Run Code Online (Sandbox Code Playgroud)