欢迎来到代码驿站!

JavaScript代码

当前位置:首页 > 网页前端 > JavaScript代码

javascript 闭包详解

时间:2021-06-22 09:34:15|栏目:JavaScript代码|点击:

javascript 闭包是一个很有趣的东东。看了些相关资料https://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文件。实在是太好了。

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

上一篇:JS常用跨域方法实现原理解析

栏    目:JavaScript代码

下一篇:深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制

本文标题:javascript 闭包详解

本文地址:http://www.codeinn.net/misctech/145920.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有