一个不能被调用超过3次的函数 - 它会被记住

时间:2016-05-30 18:17:29

标签: javascript function

下面的代码是针对一个只能调用3次的函数,代码是正确的。我不太了解的是这一部分:

 var combi = returnIt() + returnIt() + returnIt();

我理解what正在发生什么洞察威胁函数(并且func被调用到计数器== 3)但是如何在它之外得到记忆?不确定我是否清楚地解释了我的意思..

var returnIt = threet(function() {
  return 5;
});

function threet(func){
  var counter = 0;
  return function(){
    if(counter < 3){
        counter++;
        return func();

        }
   }
}
var combi = returnIt() + returnIt() + returnIt();
combi;

1 个答案:

答案 0 :(得分:1)

这是因为javascript中称为闭包的概念。在这里理解它:

简单示例

    function add(a){


        return function(b){

            console.log(a + b);
        }


    }

    add(2)(3); //outputs 5

执行上述功能时会发生这种情况

1)使用函数add,关键字this和外部环境

创建全局执行上下文

2)当使用参数2调用函数add时,将创建该特定函数的执行上下文    在执行堆栈中。

3)当它返回其中的函数时,它的执行上下文从堆栈中弹出但是    不知何故,javascript能够保留变量&#39; a&#39;

的价值

4)然后使用参数3调用返回的函数。该函数将查找&#39; a&#39;的值。还会    得到它,因为此函数与变量&#39; a&#39;。

位于同一物理空间中

5)这被称为闭包