JS中的每个函数都是闭包吗

Sci*_*ion 5 javascript closures

我一直在阅读有关closuresJS的文章。我已经浏览过各种指南,例如https://medium.freecodecamp.org/javascript-closures-simplified-d0d23fa06ba4

我仍然有一个问题。闭包是否仅引用一阶函数(返回函数的函数)。或者,是否有任何功能closure?我真正看到的唯一区别是某些函数没有嵌套,这3个作用域链(外部函数的作用域)之一将是空的,但它仍然不存在。

Poi*_*nty 3

闭包是通过调用函数创建的;函数本身不是闭包。从概念上讲,每个函数调用都会隐式地导致一个新的闭包的出现。对于某些函数,闭包是短暂的,一旦函数返回就会消失:

function add2(n) {
  return n + 2;
}
Run Code Online (Sandbox Code Playgroud)

该函数仅返回一个数字;没有任何东西可以引用函数调用创建的闭包中的任何内容,因此闭包消失,剩下的就是返回值。

当一个函数返回一个或多个“挂钩”到调用该函数时创建的本地环境的东西时,闭包就会变得有趣。(该函数也可以通过修改全局环境来公开闭包。)所以这个函数:

function addn(addend) {
  return function(n) {
    return n + addend;
  }
}
Run Code Online (Sandbox Code Playgroud)

公开闭包,因为返回的函数具有对外部函数的参数的引用。

我想不出一种普通函数可以公开一个闭包的方法,该闭包不以某种方式涉及一个或多个引用本地上下文(参数、变量)中的内容的函数。(生成器函数很有趣,因为yield我想,它总是返回一些公开闭包的东西。)