回调函数总是关闭吗?

时间:2015-12-28 21:48:36

标签: javascript

在Javascript中,回调函数总是一个闭包? 反过来不是真的[?],如下所示

function makeFunc() {
  var name = "Mozilla";
  function displayName() {
    alert(name);
  }
  return displayName;
};

var myFunc = makeFunc();
myFunc();

myfunc是闭包,而不是回调。

  

闭包是从其封闭环境继承变量的函数。当你通过   函数回调作为另一个将执行I / O的函数的参数,这个回调函数会   稍后调用,这个函数 - 几乎神奇地 - 将记住它的上下文   声明了,以及该上下文中可用的所有变量以及任何父上下文。这个   强大的功能是Node成功的核心。

来自其他link

  

此外,因为回调的行为就像它们实际放在里面一样   这个功能,他们在实践中关闭:他们可以访问   包含函数的变量和参数,甚至包含变量   来自全球范围。

link

  

当我们传递一个回调函数时   对另一个函数的参数,回调是在某个时刻执行的   在包含函数的主体内部就像回调一样   在包含函数中定义。这意味着回调是一个   关闭。阅读我的帖子,轻松了解JavaScript闭包   更多关于闭包。众所周知,闭包可以访问包含   函数的作用域,因此回调函数可以访问包含的内容   函数的变量,甚至全局范围的变量。

1 个答案:

答案 0 :(得分:7)

  

回调总是关闭?

这些是正交术语。

回调是一个函数引用,传递给另一个要从其内部调用的函数。

Closure总是一个使用外部函数变量的内部函数。 如果内部函数不使用任何外部变量,那么它就不会关闭任何外部变量" - 只是一个功能与任何其他。