在Javascript中,回调函数总是一个闭包? 反过来不是真的[?],如下所示:
function makeFunc() {
var name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
};
var myFunc = makeFunc();
myFunc();
myfunc
是闭包,而不是回调。
闭包是从其封闭环境继承变量的函数。当你通过 函数回调作为另一个将执行I / O的函数的参数,这个回调函数会 稍后调用,这个函数 - 几乎神奇地 - 将记住它的上下文 声明了,以及该上下文中可用的所有变量以及任何父上下文。这个 强大的功能是Node成功的核心。
来自其他link:
此外,因为回调的行为就像它们实际放在里面一样 这个功能,他们在实践中关闭:他们可以访问 包含函数的变量和参数,甚至包含变量 来自全球范围。
当我们传递一个回调函数时 对另一个函数的参数,回调是在某个时刻执行的 在包含函数的主体内部就像回调一样 在包含函数中定义。这意味着回调是一个 关闭。阅读我的帖子,轻松了解JavaScript闭包 更多关于闭包。众所周知,闭包可以访问包含 函数的作用域,因此回调函数可以访问包含的内容 函数的变量,甚至全局范围的变量。
答案 0 :(得分:7)
回调总是关闭?
这些是正交术语。
回调是一个函数引用,传递给另一个要从其内部调用的函数。
Closure总是一个使用外部函数变量的内部函数。 如果内部函数不使用任何外部变量,那么它就不会关闭任何外部变量" - 只是一个功能与任何其他。