Javascript 这个函数为什么工作?不应该';";“已执行”;每次调用函数时是否返回false?

Javascript 这个函数为什么工作?不应该';";“已执行”;每次调用函数时是否返回false?,javascript,function,closures,iife,Javascript,Function,Closures,Iife,这个函数应该只运行一次。然而,我不明白为什么每次调用它时,执行的变量都不会返回false var onlyOnce=function(){ var=false; 返回函数(){ 如果(已执行==false){ 已执行=真; console.log(“到达代码”); } }; }(); onlyOnce(); onlyOnce()使用自动执行的外部函数,将创建一个闭包。因此,返回函数的每次执行都在执行的的同一个实例上运行。这将导致观察到的行为 您应该阅读闭包方面的内容。使用自动执行的外部函数,将

这个函数应该只运行一次。然而,我不明白为什么每次调用它时,执行的变量都不会返回false

var onlyOnce=function(){
var=false;
返回函数(){
如果(已执行==false){
已执行=真;
console.log(“到达代码”);
}
};
}();
onlyOnce();

onlyOnce()使用自动执行的外部函数,将创建一个闭包。因此,返回函数的每次执行都在执行的
的同一个实例上运行。这将导致观察到的行为


您应该阅读闭包方面的内容。

使用自动执行的外部函数,将创建一个闭包。因此,返回函数的每次执行都在执行的
的同一个实例上运行。这将导致观察到的行为


您应该仔细阅读闭包,这是因为您正在立即执行一个函数并将
onlynce
设置为该结果。你可以这样重写它:

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`

这意味着执行的
的值可以在生成的函数中使用和更改。无论您将其设置为什么,下次调用它时,它仍将具有该值(当然,除非有其他更改)。

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

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`

这意味着执行的
的值可以在生成的函数中使用和更改。无论您将其设置为什么,下次调用它时它仍将具有该值(当然,除非有其他更改)。

在javascript中,变量的作用域在包含的括号中。在某种意义上,可以将“executed”视为返回函数的全局函数,因此在更改它时保留其值。这很奇怪,但这是javascriptRead关于闭包的内容。。。在javascript中,变量的作用域在包含的括号中。在某种意义上,可以将“executed”视为返回函数的全局函数,因此在更改它时保留其值。这很奇怪,但这是javascriptRead关于闭包的内容。。。