欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript 閉包詳解

 更新時(shí)間:2015年02月15日 09:55:37   投稿:hebedich  
這篇文章主要詳細(xì)介紹了javascript 閉包的相關(guān)資料,十分詳盡,需要的朋友可以參考下

javascript 閉包是一個(gè)很有趣的東東。看了些相關(guān)資料http://www.dbjr.com.cn/article/29472.htm,對(duì)其印象最深刻的是:實(shí)現(xiàn)了public 和private。

創(chuàng)建一個(gè)非匿名閉包最簡(jiǎn)單的語(yǔ)法是:

復(fù)制代碼 代碼如下:

var obj = (function(){//各種代碼  });

閉包最經(jīng)典的例子:

復(fù)制代碼 代碼如下:

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 :

復(fù)制代碼 代碼如下:

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   

自執(zhí)行函數(shù):

  第一次看到這樣的代碼時(shí)的感覺(jué)是:好高級(jí);

復(fù)制代碼 代碼如下:

var obj = (function(window){
      //各種代碼
}(window));

  然后google了下,發(fā)現(xiàn)他們經(jīng)常都會(huì)這樣寫(xiě):

復(fù)制代碼 代碼如下:

var obj= (function () {
        var i = 1;
        this.test=function(){
            console.log(i);
            i++;
        }
        return this;
    }());
    obj.test(); // 1
    obj.test(); // 2

     最簡(jiǎn)單的理解,程序員偷懶把兩步寫(xiě)成了一步。

復(fù)制代碼 代碼如下:

    //這是一個(gè)函數(shù)。它應(yīng)該這樣用obj()
    var makeCounter = function () {
        //各種代碼
    }
    //這是一個(gè)對(duì)象。它類(lèi)似于 var obj = makeCounter();
    var obj = (function () {
        //各種代碼
    }());

  它也可以有參數(shù):

復(fù)制代碼 代碼如下:

    var output = "new test";
    var obj = (function (msg) {
        this.test = function(){
            console.log(msg);
        }
        return this;
    }(output));
    obj.test();

  它還可以更復(fù)雜更高級(jí)點(diǎn):

復(fù)制代碼 代碼如下:

var output = "new test";
    var obj = (function (obj, msg) {
        //這貨也是私有的。類(lèi)似obj.i(!=obj.i),卻又不是obj.i(因?yàn)橥獠坎豢稍L問(wèn))。
        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沒(méi)被改變
    obj.test(); // 2 : new test

初次見(jiàn)面,留下了很深刻的印象。閉包的使用,實(shí)現(xiàn)了狀態(tài),屬性的保持;避免了全局變量滿(mǎn)屏飛舞;結(jié)束了變量老是被重定義,重賦值的尷尬局面。它還可以將一個(gè)對(duì)象分部到多個(gè)js文件。實(shí)在是太好了。

上面所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

相關(guān)文章

最新評(píng)論