任何人都可以在javascript中告诉这个闭包函数的流程

时间:2015-07-30 12:36:08

标签: javascript function

请告诉我它的流程

function multiplier(factor) {  
  return function(number) {  
    return number * factor;  
  };  
}  
var twice = multiplier(2);  
console.log(twice(5));  
// → 10  

2 个答案:

答案 0 :(得分:1)

第一个函数返回另一个函数,基本上是这样的:

function(number) {
    return number * 2;
}

因为它记得"来自它的外部范围的factor参数。然后,此返回的函数将简单地应用于参数5。

答案 1 :(得分:0)

当你调用乘数函数时,它会返回另一个函数,

function(number) {  
   return number * 2;   
}; 

现在"两次"是一个函数,具有上面的函数表达式。

所以当你用参数5调用两次函数时,即两次(5),它返回" 10"。

每个人都会得到的疑问是,"因素"即使在乘数函数的范围之外,变量仍然存在。

这是因为JavaScript中的词法作用域,即外部函数变量可用于内部函数。

As" factor"在return语句中使用,javascript解析器必须为其内部函数保留其值。这叫做Closure。

Simply Closure是一个具有扩展内存的函数。