關(guān)于js的變量,開始的時候我們都會被告知,變量聲明應(yīng)該在引用該變量之前。關(guān)于為什么要這樣做呢,開始的時候本著會用就行的目的,也沒去深究。不過后來經(jīng)常會發(fā)現(xiàn)一些讓人很費解的。。姑且稱為現(xiàn)象吧。先看一段代碼再說:

function a(){
    alert(a);    var a = 'b'}
a();//undefined

  此時就會發(fā)現(xiàn)不遵守規(guī)則的下場了,結(jié)果不是你想要的。。當然我們不能說只知道要怎么寫就行了。要知其然也要知其所以然,究其原因,就涉及到兩個概念js作用域和詞法分析了。

  都知道js中不存在類似于c++等語言的塊級作用域,例如for循環(huán)中定義的變量,其實是屬于當前對象下的屬性,同一對象下可以隨便訪問。只有函數(shù)可以限定一個變量的作用范圍,即函數(shù)才是變量的作用域。對于函數(shù)的變量訪問時遵循作用域鏈的。

  js自上而下的執(zhí)行過程分為兩個詞法分析執(zhí)行兩個階段:詞法分析主要包括:分析形參、分析變量聲明、分析函數(shù)聲明三個部分(具體關(guān)于js詞法分析這里知識簡單說明,請查看我的另一篇文章http://www.cnblogs.com/pqjwyn/p/5365532.html)。通過詞法分析將我們寫的js代碼轉(zhuǎn)成可以執(zhí)行的代碼,接下來才是執(zhí)行。

  經(jīng)過詞法分析的后兩個步驟,會將存在的變量聲明和函數(shù)聲明,進行一番處理。具體拿上面的代碼做個例子(只分析變量的部分):

      1、分析形參:此處沒有,直接略過(本文只分析變量部分,要是要看完整的部分可以轉(zhuǎn)到

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓(xùn),做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學習是年輕人改變自己的最好方式