預解釋-基礎

來源:互聯網
上載者:User

標籤:

預解釋(變數提升):在當前的範圍中,JS代碼從上到下執行之前,瀏覽器會預設的先把所有帶var/function關鍵字的進行提前的聲明或者定義
對帶var變數的是提前聲明(declare)
對帶function關鍵字的是提前定義(聲明+定義)(defined)
->在預解釋階段,帶var關鍵字的只是提前的聲明,只有在JS從上到下執行的過程中才會進行定義賦值:
1 //->預解釋階段:告訴瀏覽器在當前的範圍中(window)有一個名字叫做num的變數:var num;2 console.log(num);//->undefined(只有聲明沒有定義的預設值是undefined)3 var num = 13;//->num=13;(定義:給變數賦值num=13)4 console.log(num);//->13

->在預解釋階段,帶function關鍵字的,聲明+定義兩部分都完成了:
1 //->預解釋階段:fn=xxxfff000(xxxfff000是一個記憶體位址)2 console.log(fn);//->函數本身 function fn() { console.log("ok"); }3 function fn() {4     console.log("ok"); 5 }//->3-5行代碼在預解釋階段已經聲明加定義了,以後代碼執行的時候在遇到也不會重新進行操作,直接跳過這幾行就可以了 6 console.log(fn);//->函數本身 function fn() { console.log("ok"); }
->預解釋只發生在當前的範圍中,開始的時候只對window範圍下帶var/function關鍵字的進行預解釋,而函數體中出現的帶var/function關鍵字的這些代碼此時還都是一堆字串呢(沒有實際意義),所以開始的時候函數體中帶這些關鍵字的都不需要管
只有全域代碼執行到函數執行的時候,才會形成一個新的私人範圍,在新的私人範圍中:首先給函數的形參賦值,其次是私人範圍中的預解釋:把私人範圍中帶var和function關鍵字的進行提前的聲明或者定義,最後才是私人範圍中的代碼從上到下執行

 1 //首先是window範圍下的預解釋:var n; var s; function fn=xxxfff000;   2 console.log(n,s);//n->undefined; s->undefined 3 var n = 9;//全域範圍下的n=9; 4 var s = "str1";//全域範圍下的s="str1"; 5 function fn() { 6   console.log(n,s);//n->undefined; (這個是fn私人範圍的n) s->str1; (這個是全域範圍的s) 7   n = 7;//定義私人範圍下的n=7; 8   s = "str2";//定義全域範圍下的s="str2"; 9    var n = 6;//定義私人範圍下的n=6;10 }11 fn();12 console.log(n,s);//此時輸出的都是全域範圍的: n->9; s->str2;

->範圍鏈的問題:
在私人範圍中,JS代碼從上到下執行,如果遇到了一個變數,
首先看是否是自己私人的變數,如果是私人的,那麼我們接下來的所有操作(擷取值,修改值...)都是用的自己私人的,和外面沒有任何關係
如果不是自己私人的,則去當前範圍的上一級範圍中尋找,如果上一級有,那麼接下來操作的,都是在操作上級範圍中的變數;如果上級也沒有,則繼續向上尋找,一直找到window為止
如果找到window還沒有?如果是 變數=值 相當於給window下增加一個屬性名稱和屬性值:如果是console.log(變數)擷取值,會報錯

->如何看變數是否為私人的:
首先看是否為形參
然後看是否在私人範圍中聲明過(看有沒有帶var)
兩者有其一,就是自己私人的變數;如果兩個都不是,就不是私人的,按照上述的範圍鏈原理來進行尋找

預解釋-基礎

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.