我运行了下面的代码,第一个警报提醒'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();
答案 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”)