javascript 闭包详解
作者:bea
javascript 闭包是一个很有趣的东东。看了些相关资料http:///article/29472.htm,对其印象最深刻的是:实现了public 和private。 创建一个非匿名闭包最简单的语法是: 代码如下: var obj = (function(){//各种代码 }); 闭包最经典的例子: 代码如下: var makeCounter = (function () { var i = 1; this.test=function(){
javascript 闭包是一个很有趣的东东。看了些相关资料http:///article/29472.htm,对其印象最深刻的是:实现了public 和private。
创建一个非匿名闭包最简单的语法是:
代码如下:
var obj = (function(){//各种代码 });
闭包最经典的例子:
代码如下:
var makeCounter = (function () {
var i = 1;
this.test=function(){
console.log(i);
i++;
}
return this;
});
var obj = makeCounter();
obj.test(); // 1
obj.test(); // 2
var obj1 = makeCounter();
obj1.test(); // 1
obj1.test(); // 2
private 与 public :
代码如下:
var makeCounter= (function () {
var i = 1;
//这货是private的
function log(){
console.log(i);
i++;
}
//这货是public的
this.test(){
log();
}
return this;
});
var obj = makeCounter();
obj.test(); // 1
obj.test(); // 2
obj.log(); //undefined
自执行函数:
第一次看到这样的代码时的感觉是:好高级;
代码如下:
var obj = (function(window){
//各种代码
}(window));
然后google了下,发现他们经常都会这样写:
代码如下:
var obj= (function () {
var i = 1;
this.test=function(){
console.log(i);
i++;
}
return this;
}());
obj.test(); // 1
obj.test(); // 2
最简单的理解,程序员偷懒把两步写成了一步。
代码如下:
//这是一个函数。它应该这样用obj()
var makeCounter = function () {
//各种代码
}
//这是一个对象。它类似于 var obj = makeCounter();
var obj = (function () {
//各种代码
}());
它也可以有参数:
代码如下:
var output = "new test";
var obj = (function (msg) {
this.test = function(){
console.log(msg);
}
return this;
}(output));
obj.test();
它还可以更复杂更高级点:
代码如下:
var output = "new test";
var obj = (function (obj, msg) {
//这货也是私有的。类似obj.i(!=obj.i),却又不是obj.i(因为外部不可访问)。
var i = 1;
//private
function log() {
console.log(i + " : " + msg);
i++;
}
//public
obj.test = function () {
log();
}
return obj;
}(obj, output));
obj.test(); // 1 : new test
obj.i = 100;
//i没被改变
obj.test(); // 2 : new test
初次见面,留下了很深刻的印象。闭包的使用,实现了状态,属性的保持;避免了全局变量满屏飞舞;结束了变量老是被重定义,重赋值的尴尬局面。它还可以将一个对象分部到多个js文件。实在是太好了。
上面所述就是本文的全部内容了,希望大家能够喜欢。
有用 | 无用
创建一个非匿名闭包最简单的语法是:
代码如下:
var obj = (function(){//各种代码 });
闭包最经典的例子:
代码如下:
var makeCounter = (function () {
var i = 1;
this.test=function(){
console.log(i);
i++;
}
return this;
});
var obj = makeCounter();
obj.test(); // 1
obj.test(); // 2
var obj1 = makeCounter();
obj1.test(); // 1
obj1.test(); // 2
private 与 public :
代码如下:
var makeCounter= (function () {
var i = 1;
//这货是private的
function log(){
console.log(i);
i++;
}
//这货是public的
this.test(){
log();
}
return this;
});
var obj = makeCounter();
obj.test(); // 1
obj.test(); // 2
obj.log(); //undefined
自执行函数:
第一次看到这样的代码时的感觉是:好高级;
代码如下:
var obj = (function(window){
//各种代码
}(window));
然后google了下,发现他们经常都会这样写:
代码如下:
var obj= (function () {
var i = 1;
this.test=function(){
console.log(i);
i++;
}
return this;
}());
obj.test(); // 1
obj.test(); // 2
最简单的理解,程序员偷懒把两步写成了一步。
代码如下:
//这是一个函数。它应该这样用obj()
var makeCounter = function () {
//各种代码
}
//这是一个对象。它类似于 var obj = makeCounter();
var obj = (function () {
//各种代码
}());
它也可以有参数:
代码如下:
var output = "new test";
var obj = (function (msg) {
this.test = function(){
console.log(msg);
}
return this;
}(output));
obj.test();
它还可以更复杂更高级点:
代码如下:
var output = "new test";
var obj = (function (obj, msg) {
//这货也是私有的。类似obj.i(!=obj.i),却又不是obj.i(因为外部不可访问)。
var i = 1;
//private
function log() {
console.log(i + " : " + msg);
i++;
}
//public
obj.test = function () {
log();
}
return obj;
}(obj, output));
obj.test(); // 1 : new test
obj.i = 100;
//i没被改变
obj.test(); // 2 : new test
初次见面,留下了很深刻的印象。闭包的使用,实现了状态,属性的保持;避免了全局变量满屏飞舞;结束了变量老是被重定义,重赋值的尴尬局面。它还可以将一个对象分部到多个js文件。实在是太好了。
上面所述就是本文的全部内容了,希望大家能够喜欢。
有用 | 无用
猜你喜欢
您可能感兴趣的文章:
- js实现鼠标悬停图片上时滚动文字说明的方法
- js鼠标滑过图片震动特效的方法
- js实现双击图片放大单击缩小的方法
- js图片模糊切换显示特效的方法
- js实现单击图片放大图片的方法
- js实现iframe自动自适应高度的方法
- js全选实现和判断是否有复选框选中的方法
- Jquery树插件zTree用法入门教程
- js实现九宫格图片半透明渐显特效的方法
- JS+CSS实现Li列表隔行换色效果的方法
- JavaScript实现文字与图片拖拽效果的方法
- jQuery实现点击图片翻页展示效果的方法
- JS+CSS实现可拖动的弹出提示框
- js实现下拉框选择要显示图片的方法
- js实现点击图片将图片地址复制到粘贴板的方法
- js实现鼠标经过时图片滚动停止的方法
- js鼠标点击图片实现随机变换图片的方法
- JavaScript简介
- JavaScript的原型继承详解