Sci*_*ion 5 javascript closures
我一直在阅读有关closuresJS的文章。我已经浏览过各种指南,例如https://medium.freecodecamp.org/javascript-closures-simplified-d0d23fa06ba4
我仍然有一个问题。闭包是否仅引用一阶函数(返回函数的函数)。或者,是否有任何功能closure?我真正看到的唯一区别是某些函数没有嵌套,这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我想,它总是返回一些公开闭包的东西。)