javascript 闭包详解
来源: 阅读:604 次 日期:2015-02-27 13:29:56
温馨提示: 小编为您整理了“javascript 闭包详解”,方便广大网友查阅!

这篇文章主要详细介绍了javascript 闭包的相关资料,十分详尽,需要的朋友可以参考下

javascript 闭包是一个很有趣的东东。看了些相关资料,对其印象最深刻的是:实现了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文件。实在是太好了。

上面所述就是本文的全部内容了,希望大家能够喜欢。

更多信息请查看IT技术专栏

更多信息请查看脚本栏目
手机网站地址:javascript 闭包详解
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map