javascript - 为什么这个功能有效?每次调用该函数时, "executed"不应该返回 false 吗?

标签 javascript function closures iife

该函数应该只运行一次。但是我不明白为什么每次调用它时执行的变量都不会返回 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.这意味着可以在生成的函数内部使用和更改执行的值。无论您将其设置为什么,下次调用它时它仍然具有该值(当然,除非其他东西改变了它)。

关于javascript - 为什么这个功能有效?每次调用该函数时, "executed"不应该返回 false 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38339787/

相关文章:

grails - 闭包中的变量以避免多个 if

javascript - Tableau HTML 嵌入在 Chrome 中不起作用

javascript - SVG 的渲染可以推迟到我完成对它的操作吗?

javascript - kendoui grid,当autoBind配置设置为false时绑定(bind)数据

C++ 如何将一个函数的引用传递给另一个函数?

gradle - Gradle和插件扩展关闭执行顺序

javascript - 在 nwjs 13 上禁用 DevTools

javascript - 你如何在两个功能之间暂停?

python - 函数和列表

swift - 如何使用 dispatchQueue 创建引用循环?