亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        javascript 閉包詳解

        字號:


            這篇文章主要詳細(xì)介紹了javascript 閉包的相關(guān)資料,十分詳盡,需要的朋友可以參考下
            javascript 閉包是一個(gè)很有趣的東東??戳诵┫嚓P(guān)資料,對其印象最深刻的是:實(shí)現(xiàn)了public 和private。
            創(chuàng)建一個(gè)非匿名閉包最簡單的語法是:
            代碼如下:
            var obj = (function(){//各種代碼 });
            閉包最經(jīng)典的例子:
            代碼如下:
            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
            自執(zhí)行函數(shù):
            第一次看到這樣的代碼時(shí)的感覺是:好高級;
            代碼如下:
            var obj = (function(window){
            //各種代碼
            }(window));
            然后google了下,發(fā)現(xiàn)他們經(jīng)常都會這樣寫:
            代碼如下:
            var obj= (function () {
            var i = 1;
            this.test=function(){
            console.log(i);
            i++;
            }
            return this;
            }());
            obj.test(); // 1
            obj.test(); // 2
            最簡單的理解,程序員偷懶把兩步寫成了一步。
            代碼如下:
            //這是一個(gè)函數(shù)。它應(yīng)該這樣用obj()
            var makeCounter = function () {
            //各種代碼
            }
            //這是一個(gè)對象。它類似于 var obj = makeCounter();
            var obj = (function () {
            //各種代碼
            }());
            它也可以有參數(shù):
            代碼如下:
            var output = "new test";
            var obj = (function (msg) {
            this.test = function(){
            console.log(msg);
            }
            return this;
            }(output));
            obj.test();
            它還可以更復(fù)雜更高級點(diǎn):
            代碼如下:
            var output = "new test";
            var obj = (function (obj, msg) {
            //這貨也是私有的。類似obj.i(!=obj.i),卻又不是obj.i(因?yàn)橥獠坎豢稍L問)。
            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
            初次見面,留下了很深刻的印象。閉包的使用,實(shí)現(xiàn)了狀態(tài),屬性的保持;避免了全局變量滿屏飛舞;結(jié)束了變量老是被重定義,重賦值的尷尬局面。它還可以將一個(gè)對象分部到多個(gè)js文件。實(shí)在是太好了。
            上面所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。