标题 | 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文件。实在是太好了。 上面所述就是本文的全部内容了,希望大家能够喜欢。 |
随便看 |
|
在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。