下面的代码是针对一个只能调用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;
答案 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)这被称为闭包