请教一个Javascript的问题

如题所述

第1个回答  2017-06-20
这是“闭包”,解释如下:
var abc=function(y){
var x=y;
return function(){ // 这个函数将赋值给 abc
alert(x++);
alert(y--);
}
}(5);
// 在函数定义后面紧跟一对圆括号,表示立即执行此函数,所以会以 5 作参数调用函数function(y){……},并将返回值赋值给 abc。
// function(y){……}的返回值实际上是一个函数,也就是说 abc 的值将是 function(y){……} 内部定义的一个函数,而不是 function(y){……}。
// 在一个函数内部输出了一个“子函数”的情况叫做“闭包”。
// 闭包有以下特点:
// 子函数可以使用主函数中的局部变量(包括形参);
// 子函数没有被“销毁”前,主函数过程空间也不会被销毁,其局部变量(包括形参)继续保留。
// 所以 abc 是一个闭包子函数,每次调用 abc 都会操作其主函数过程中的 x 和 y。
第二个问题:请问为何在函数后面用 (5) 初始化,如果去掉(5),写成abc(5); 就没有任何弹出。
如果去掉(5),则 abc 将等于主函数,
每次执行 abc(5) 都会返回一个闭包子函数,但却不会执行那个闭包子函数。
值得注意的是,每次执行 abc(5) 所返回的不是同一个子函数,这些子函数中所操作的 x 、y也是不同的 x、y。原因是每次执行 abc(5) 都会建立一个主函数过程,每个主函数过程有自己的局部变量。
相似回答