我运行下面的代码,第一个警报是警报“ a”。单击“确定”后,警报“ b”立即弹出,但我不知道这一切如何工作。

由于将a()分配给var newFunc,因此当我在newFunc();之后按Enter时,它将运行函数a(),并且函数a()返回一个匿名函数,但是如何调用该匿名函数以使alert('单击确定后出现B')弹出窗口在警报弹出吗?

function a(){
  alert ('A');
  return function() {
    alert('B');
  };
}

var newFunc = a();
newFunc();

最佳答案

函数a通过a()警报'A'获取被调用者。它返回一个匿名函数,然后将其存储在变量newFunc中。为什么?因为您分配了它:var newFunc = a();

然后,您可以将newFunc视为:

var newFunc = function() {
    alert('B');
};


然后,使用newFunc()调用返回的函数。它提示“ B”。

这称为关闭。查看more about closures,它们非常棒。

10-06 00:17