首頁  >  問答  >  主體

javascript - 閉包閉包閉包 還是不懂閉包

閉包閉包 還是不懂啊。求解釋。

        var fwx = (function(){
            var i = 0;
            var a = 1;
            var b = 2;
            var c = function (m) {var a = m;
                 a = m;
                console.log(i++);
              //  i = null;
            };
            var d = function () {
                var v  = a;
                console.log("。。。。"+a);
                console.log(i++);

                console.log(this.i);
                return v;
            };

            return {
                i : i ,
                a : a ,
                c : c ,
                d : d
            }
        })();

        console.log(fwx.i+"+"+fwx.a,
                fwx.d()+"+"+fwx.i,
                fwx.d()+"+"+fwx.i,

                fwx.c(111)+"+"+fwx.i,

                fwx.d()+"+"+fwx.i,
                fwx.d()+"+"+fwx.i,
                fwx.d()+"+"+fwx.i,
                fwx.a
        );

##1.c方法中的閉包域中有 a、i
那麼該a和fwx.a 有什麼不同?

2.我該如何清楚閉包?

高洛峰高洛峰2734 天前631

全部回覆(5)我來回復

  • 给我你的怀抱

    给我你的怀抱2017-05-19 10:16:40

    閉包就是函數可以存取其宣告時所在作用域內的變量,根據這個特性可以在函數內返回一個函數,透過這個被傳回的函數可以在函數外部存取函數內的變數;
    根據作用域鏈,當函數存取變數時先在自身作用域內查找,若沒有則向外層函數的作用域查找,依此類推,直到找到全域作用域為止,因為c函數作用域內有a,所以c函數內的a和fwx的a並不一樣,而i是fwx內的i

    回覆
    0
  • phpcn_u1582

    phpcn_u15822017-05-19 10:16:40

    推薦一則關於閉包的文章,透過chrome開發者工具理解閉包。

    回覆
    0
  • phpcn_u1582

    phpcn_u15822017-05-19 10:16:40

    做多少這種題都沒啥用,直接做項目,做著做著你就明白了。

    回覆
    0
  • phpcn_u1582

    phpcn_u15822017-05-19 10:16:40

    《你不知道的javascript》 看一下這本書,可以理解的更深一點

    回覆
    0
  • 某草草

    某草草2017-05-19 10:16:40

    我比較贊同一種說法:前端要一步步來,你不可能越級打怪的。
    你要寫過一些程式碼,有一些自己的想法,再看就好懂了,在此之前,多看多寫,別無他法。
    我是c++出身的,剛看也一臉蒙逼,從最開始看到懂過了一年多。
    http://user.qzone.qq.com/2084...
    上面是我自己寫的一篇文,結和了阮一峰和知乎上一位答友的回答,還有網上其它博客寫的一篇日誌,希望對你有幫助

    回覆
    0
  • 取消回覆