该功能只能运行一次。但是我不明白为什么每次调用该变量时,执行的变量都不会返回false。



var onlyOnce = function() {
  var executed = false;
  return function() {
    if (executed == false) {
      executed = true;
      console.log("Code reached");
    }
  };
}();
onlyOnce();
onlyOnce();





此代码仅打印一次。为什么这样做?

最佳答案

这是因为您要立即执行一个函数并将onlyOnce设置为该结果。您可以这样重写它:

function createOnlyOnce() {
  var executed = false;
  return function() { // Return a new function
    if (!executed) { // I prefer this over == false
      executed = true;
      console.log('Code reached');
    }
  };
}

var onlyOnce = createOnlyOnce(); // Created a new function
onlyOnce(); // Calls the generated function, not createOnlyOnce
onlyOnce(); // Since we're calling the generated function, executed is still `true`


最后得到的是closure.,这意味着executed的值可以在生成的函数内部使用和更改。无论您将其设置为什么,下次调用它时,它仍将具有该值(当然,除非有其他更改)。

07-25 20:41