版本1:



function myF() {
  var executed = false;
  return function() {
    if (!executed) {
      executed = true;
      document.getElementById("demo").innerHTML = "Ab"
    }
  };
};

myF();





版本2:



var myF = (function() {
  var executed = false;
  return function() {
    if (!executed) {
      executed = true;
      document.getElementById("demo").innerHTML = "Ab"
    }
  };
})();

myF();





为什么v2有效,为什么v1不有效?调用它们时,两者之间的主要区别是什么?

最佳答案

版本2返回IIFE的结果,版本1相同但不调用表达式。您可以像myF()()那样调用它,



function myF() {
  var executed = false;
  return function() {
    if (!executed) {
      executed = true;
      document.getElementById("demo").innerHTML = "Ab"
    }
  };
};

myF()();

<div id="demo">
</div>

07-28 10:01