代码一(function(){vara=20;window.func=function(){alert(a)}})()代码二varfunc=(function(){vara=20;returnfunction(){alert(a)}})()代码一这种形式是闭包么?俩个函数都可以一直访问a变量,他们的区别是什么闭包的形成必须有return关键字吗?
2 回答

qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
一般来讲,js的所有函数都是闭包,但是匿名函数可以在其它函数内部创建,而且可以访问到外层的局部变量,相对来讲功能比较强一点。然而这两种函数都一样,return可有可无。如果一个函数没有return,那它的返回值默认是undefined。

Cats萌萌
TA贡献1805条经验 获得超9个赞
代码一是闭包,把a的值每次加1测试下就ok了。两者区别就是,代码一中func是内部函数,并且func被挂载到window下,所以func可以直接调用。代码二中func是外部函数并且被立即执行了,内部函数被当作返回值返回了,所以代码二func()时,也是直接调用的内部函数。从结果来说两者是相同的,只是实现的方式略有不同。
添加回答
举报
0/150
提交
取消