为什么在JavaScript中将“ reduce”和“ map”视为闭包?

trebek1

我正在研究闭包,通常我将闭包看作是从另一个函数返回的函数,或者是一个在另一个函数内部设置为全局函数的函数,以便新函数(返回的函数或全局变量)具有引用创建它的初始封闭函数中的变量。最近,有人告诉我,map或reduce函数形成了闭包。它们返回一个或多个值,并且不返回任何函数。当您只有回调时,我看不到此方法如何形成闭包。实际上,MDN声明reduce函数返回一个“值”,而map函数返回一个数组。那么关闭在哪里?有人可以解释吗?

trebek1

谢谢大家对问题的回答。有了这些和chrome调试器,我得出了结论。正如Alnitak所说:“
这是封闭式的,因为它可以从外部范围访问变量。仅具有访问它们的能力是不够的。” 这是我所缺少的重要一点。另外,您可以在“来源”标签的“作用域”部分中看到通过闭包包含的chrome调试器变量。因此,看下面的示例,我们可以确切地看到什么是闭包:

routerAction: function () {
  var name = "alex"; 
  var alex = function(v){
    debugger;
    console.log("this is var ", name);
  }
    alex(); // if name was passed and then printed it would be local 
            // not a closure  
}

函数从全局变量,局部变量和闭包变量获取范围。当您将“名称”作为参数传递给alex函数时,它将成为局部变量,因此没有闭包。因此,如果我将其传递给alex并在控制台上记录了名称为“ v”的控制台,则不会通过闭包引用任何变量。但是,由于名称是在函数alex的作用域之外定义的,然后在其内部使用,因此它是通过闭包作用的(在chrome调试器的作用域部分中可以看到)。按照同样的逻辑,如果要在函数内部定义要使用的数组(使用map或reduce),则当回调内部引用了该数组时,回调必须形成闭包。如果仅通过参数引入参数,则不会通过闭包访问任何变量,它们都是局部变量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章