返回一个函数(来自Stoyan Stefanov的面向对象的JavaScript第95页)

时间:2011-03-18 06:35:13

标签: javascript

我运行了下面的代码,第一个警报提醒'a'。点击o.k.后,警告'b'立即弹出,但我不明白这一切是如何起作用的。

由于a()被分配给var newFunc,当我在newFunc();之后按Enter键时,它运行函数a(),函数a()返回一个匿名函数,但是这个匿名函数是怎样的在我点击确定后弹出警报('B')在警报A弹出?

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

var newFunc = a();
newFunc(); 

2 个答案:

答案 0 :(得分:2)

功能a获得a()警告'A'的来电。它返回一个匿名函数,然后将其存储在变量newFunc中。为什么?因为您分配了它:var newFunc = a();

然后您可以将newFunc视为:

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

然后用newFunc()调用返回的函数。它警告'B'。

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

答案 1 :(得分:2)

第一次通话后

var newFunc = a();//alerts A

函数a()已执行,它的返回值是另一个函数,写入变量newFunc

newFunc();//alerts B

newFunc是一个类型为function的变量,因此可以执行(并且警告“B”)