JS範圍解析

來源:互聯網
上載者:User

標籤:

瀏覽器:“JS解析器”1)JS 的預解析,“找3樣東西,變數,函數,參數”:var  function 參數a = undefined所有的變數,在正式運行代碼之前,都提前賦了一個值:undefined未定義fn1 = function fn1(){ alert(2); }所有的函數,在正式運行代碼之前,都是整個函數塊遇到重名的:只留一個變數和函數重名了,就只留下函數2)逐行解讀代碼:運算式:= + - * / % ++ -- ! 參數……什麼是運算式? 答:可以修改預解析的值!

  

總結:域由兩部分組成,script域和function域,先預解析後逐步執行代碼.預解析:找var和function! 

 兩大特徵: 自上而下,自內而外; 運算式能夠改變倉庫中的值; 

0.

<script>    alert(a); //undefined    var a = 10;</script>//**********************//瀏覽器沒反應,F12顯示 "a is not defined"<script>    alert(a);     a = 10;</script>

0.1

<script>    alert(a); // function a(){}    var a = 1;    alert(a); //1    function a(){        alert(4)    }    alert(a) //1</script>

0.2 執行到第一行代碼的時候先執行的js預解析,發現有var a變數的和函數 a,因為重名只能留一個,函數優先順序別高於變數和參數,所以是留下的是函數a,再往下解析凡是遇到變數直接ko掉直到遇到最後一個函數,後面的函數會覆蓋前面的函數!所以第一行 列印的是function a(){alert (4)}; 預解析好之後是逐步執行代碼,有加減乘除等就能改變預解析的值,所以a在不斷的被改變!本題中的函數都沒有被調用,可以被忽視,如果調用了那麼函數有自己的範圍,也要重新做預解析和逐步執行代碼

<script>    alert(a) // function a(){alert 4}    var a = 1;    alert(a) //1    function a(){        alert(2)    }    alert(a) //1    var a = 3;    alert(a) //3    function a(){        alert(4)    }    alert(a);//3    a(); //等價於3(),報錯是"a is not a function"</script>

  

  

  

1.

    var a = 1;    function fn1(){        alert(a); //1    }

2.

    var a = 1;    function fn1(){        alert(a); //undefined        var a = 2;    }

3. 

    var a = 1;    function fn1(){        alert(a);        var a = 2;    }    fn1();//undefined    alert(a);//1

4. 當在fn1域中,找不到var和新的函數,那麼就會往它的父級範圍去找,找到了,彈出1;當遇到運算式a=2,更改了a的值!

<script>    var a = 1;    function fn1(){        alert(a);        a = 2;    }    fn1(); //1 自內而外    alert(a); //2,局部修改全域</script>

5. 注意 函數的形參等於局部變數

<script>    var a = 1;    function fn1(a){ //等於var a        alert(a);        a = 2;    }    fn1(); //undefined     alert(a); //1</script>

6.當遇到函數的調用的時候,形參a讀到是全域變數var a =1; 傳過去的時候變成了函數的局部變數,a = 2;改變的是函數範圍的局部變數a,與全部變數的a沒一分錢的關係

<script>    var a = 1;    function fn1(a){        alert(a);        a = 2;    }    fn1(a); //1    alert(a); //1</script>

  

  

  

  

  

  

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.