欢迎您访问我爱IT技术网,今天小编为你分享的javascript教程:【javascript 闭包详解_javascript技巧_脚本之家】,下面是详细的讲解!
javascript 闭包详解_javascript技巧_脚本之家
javascript 闭包是一个很有趣的东东。看了些相关资料http://www.jb51.net/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文件。实在是太好了。
上面所述就是本文的全部内容了,希望大家能够喜欢。
关于javascript 闭包详解_javascript技巧_脚本之家的用户互动如下:
相关问题:谁来解释一下Javascript闭包的概念
答:闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。"闭包" 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自... >>详细
相关问题:javascript 闭包问题
答:闭包的使用是为保持对某一作用域访问的。 节点onclick 事件触发时 执行function(e){alert(i);}。i指向function(nodes){}函数作用域里面的i。 事件是在 节点绑定函数之后才触发的。这时,i已经循环到nodes.length。i的值就是nodes.length。 为了... >>详细
相关问题:JavaScript 中的闭包好处是什么?为什么用到闭包?
答:一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。 二、如何从外部读取局部变量? 出于种种原因,我们... >>详细
- 【firefox】firefox浏览器不支持innerText的解决
- 【Extjs】Extjs学习过程中新手容易碰到的低级错误
- 【clearInterval】js clearInterval()方法的定义
- 【dom】javascript dom追加内容实现示例-追加内容
- 【checkbox】让checkbox不选中即将选中的checkbox
- 【Array】js中更短的 Array 类型转换-类型转换
- 【append】append和appendTo的区别以及appendChil
- 【ExtJs】ExtJs 表单提交登陆实现代码-表单提交-
- 【addClass】javascript自定义的addClass()方法
- 【Event】jquery下为Event handler传递动态参数的
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
