网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的考试资料:

 

标题 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文件。实在是太好了。
    上面所述就是本文的全部内容了,希望大家能够喜欢。
随便看

 

在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/17 8:36:31