JS 之範圍鏈和閉包

來源:互聯網
上載者:User

標籤:

1.JS無塊級範圍

    <script>        function Main(){            if (1==1){                var name = "alex";            }            console.log(name);        }        Main();    </script>
執行結果:{}即塊級範圍。
alex

2.JS採用函數作為範圍鏈

    <script>        function Main(){            var innerValue = "alex";        }        Main();        console.log(innerValue);    </script>
執行結果:
Uncaught ReferenceError: innerValue is not defined

3.JS的範圍鏈在建立前已經產生了

樣本一:

    <script>        xo = "alex";        function Func(){            var xo = "seven";            function inner(){                console.log(xo);            }            return inner;        }        var ret = Func();        ret();    </script>
執行結果:產生的範圍鏈為 xo("alex")----xo("undefined")----xo(使用範圍鏈)
seven

樣本二:

    <script>        xo = "alex";        function Func(){            var xo = "eric";            function inner(){                console.log(xo);            }            xo = "seven";            return inner;        }        var ret = Func();        ret();    </script>
執行結果:產生的範圍鏈xo("alex")----xo("undefined")----xo("undefined")----Func[xo]("eric")----Func[xo]("seven")----inner()
seven

樣本三:

    <script>        xo = "alex";        function Bar(){            console.log(xo);        }        function Func(){            var xo = "seven";            return Bar;        }        var ret = Func();        ret();    </script>
執行結果:範圍鏈分為二段:1.xo("alex")----xo
              2.xo("alex")----xo("undefined")----Func[xo]("seven")
alex

閉包:如果每個下載的JS都有自訂的全域變數,那麼在匯入的時候就會發生相互覆蓋的現象,通過閉包可以將變數鎖定在函數內。

(function(){    var a = 123;    function f1(){        console.log(a);    }    function f2(){        cocnsole.log(a);    }})();    

物件導向JS

    <script>        function Foo(name,age){            this.name = name;            this.age = age;        }        Foo.prototype = {            GetInfo:function(){                return this.name + this.age;            },            Func:function(arg){                return this.name + arg;            }        }        var obj = new Foo(‘alex‘,22);        console.log(obj.name);        console.log(obj.GetInfo());        console.log(obj.Func(55));    </script>
執行結果:
alexalex22alex55

 

JS 之範圍鏈和閉包

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.