为了账号安全,请及时绑定邮箱和手机立即绑定

使用闭包,为什么要有一个变量c来接收a?视频里说不然接受完就没有了是什么意思?

	function a(){
			var i=0;
			function b(){
				i++;
				alert(i);
			}
			return b;
		}
		var c=a();
		c();
		c();


正在回答

2 回答

首先,闭包本身是指有权访问另一个函数作用域中的变量的函数,在闭包里return内层的函数是为了内层函数能在外面被调用,这跟闭包本身的概念无关。

在函数a里:

return b

是返回函数b的引用(而不是调用),也就是一个指向函数b的指针,所以

var c=a();

就相当于c=b,执行c函数就相当于执行函数b。

老师的这个例子里体现了闭包的两个作用:

一是隐藏(保护)一个变量(这里就是局部变量i),局部变量在外部不能直接访问,在闭包里定义一个函数b可以访问i,return函数b就能在外部通过函数b间接访问i了。要注意的是,如果不用c来接收a();,函数a执行完之后,其局部活动对象(包括函数b)会被销毁,此时就不能在外部调用函数b了。这也引出了闭包的另一个作用:内部函数会将外部函数的活动对象添加到它的作用域链中,外部函数执行完毕后,其活动对象不会被销毁,仍然留在内存中。

1 回复 有任何疑惑可以回复我~

个人理解,如果是a(),那么只是返回函数b,并未执行函数b.所以可以这样写:a()(),等效成 var c = a(); c();

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Jquery插件transform旋转焦点图
  • 参与学习       31563    人
  • 解答问题       52    个

本视频教程教你制作带旋转效果的焦点图轮播器,结合案例学的更快

进入课程

使用闭包,为什么要有一个变量c来接收a?视频里说不然接受完就没有了是什么意思?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信