请教一个Javascript的问题

 我来答
地瓜说机
2017-10-10 · TA获得超过2.9万个赞
知道大有可为答主
回答量:2.3万
采纳率:91%
帮助的人:1.2亿
展开全部
这是“闭包”,解释如下:

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) 都会建立一个主函数过程,每个主函数过程有自己的局部变量。
ZhangXin777999
2017-10-10 · TA获得超过3168个赞
知道大有可为答主
回答量:2075
采纳率:84%
帮助的人:231万
展开全部
什么问题?请描述清楚。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式