您的位置:首页 > Web前端 > JavaScript

javascript 单例和闭包

2016-03-06 22:41 651 查看
单例为一种设计模式,指只能实例化一次的对象,单例的好处

避免暴露太多变量到全局变量window中,可以用来做命名空间,避免命名冲突,可以用来写类库等,jquery就是一个大大的命名空间 jQuery.fn = jQuery.prototype = {..}

var ValidateUtil = {
checkEmail : function(){};
checkPassword : function(){};
};


该单例对window只暴露一个ValidateUtil 的命名空间

执行匿名函数,闭包的特性

var initLayout = (function(){
var layoutBox = document.getElementById("layoutId");
layoutBox.style.width = window.document.clientWidth;
layoutBox.style.height = window.document.clientHeight;
})();


通过该函数,我们设置了布局的宽度和高度,由于外部不能引用内部变量,执行函数之后,变量马上释放,节省内存。

缓存变量,让变量始终保存在内存中

var f1 = (function(){
var i = 0;
var out = function(){
console.log(i);
};
add = function(){//没有添加var为全局变量
i++;
}
return out ;
}());
var out = f1; //out暴露在window中,被全局变量引用,而out又依赖i,所以i变量缓存在变量中
add();
out(); //输入i为1说明i长住在内存中


闭包是单例的一种实现方式,创建一个匿名函数,然后立即运行它,所有变量和函数都在一个“闭包”中

(function(){
var name = "liuxg";
var i = 0
var f  = function(){ //内部访问外部函数的变量
console.log("name="+name + " age=" + age );
}
})();


先用括号把函数定义括起来,从而得到该函数对象,然后后面的括号是立即运行它。jQuery就是这样子实现:

(function( window, undefined ) {
......
window.jQuery = window.$ = jQuery;   //最后一行
})(window);


注:大量滥用闭包会导致内存保存暴涨,在IE浏览器中还可能会出现内存泄漏,应该慎用闭包
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: