日期:2014-05-16  浏览次数:20404 次

这样的闭包有什么用处
本帖最后由 u011461314 于 2013-09-09 11:34:56 编辑
var Plugin = (function(){
function Plugin(){

}
Plugin.prototype.a = function(){

}
return Plugin;
})();

var a1 = new Plugin();
a1.a();


都是一个变量暴露在外面。这样包起来有什么好处。

jquery.shapeshift.js
http://www.jqueryscript.net/demo/Dynamic-Drag-Drop-Grid-Layout-Plugin-shapeshift/demo/

------解决方案--------------------
可以了理解为自执行函数。
------解决方案--------------------
你可以为这个类增加不能公共访问的私有静态变量等等
<script type="text/javascript">
var Plugin = (function(){
var num=0;
    function Plugin(){
         num++;
    }
    Plugin.prototype.a = function(){
         alert(num);
    }
    return Plugin;
})();
var x=new Plugin();
x.a();
var y=new Plugin();
y.a();
</script>
单例模式的时候可以用到 很多
------解决方案--------------------
闭包的典型框架应该就是jquery。
闭包是javascript语言的一大特点,主要应用闭包场合主要是为了:设计私有的方法和变量。
这在做框架的时候体现更明显,有些方法和属性只是运算逻辑过程中的使用的,不想让外部修改这些属性,因此就可以设计一个闭包来只提供方法获取。

闭包的缺点就是常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。
------解决方案--------------------


一般写代码时有意的闭包主要目的是:
1.不占用全局变量,避免重名,这在组件开发中是必须的,不然你在组件代码里面把全局变量占了,使用组件的人不知道一不小心就重名了;
2.保护变量,用作用域保护局部变量使其在事件函数或回调函数中正确访问

不过你前面的代码那种写法有点多此一举了,不过为了看起来好看也还行
------解决方案--------------------
顶下2楼,3楼~
比较重要的一点就是实现更好的封装,保护私有变量或属性,只给外部提供接口。
你可以将2楼的例子去掉自执行,换成一般的构造函数,然后对比一下看看。