有關Js作用域聲明提升

js拋不開的話題就是這個變量提升了,看了YDKJS關于這個的章節(jié),總結幾點。

1.聲明提升,賦值不提升,這其實表象來看的結果,其實質如下

alert(foo);

var foo = 1;

比如這兩行,結果是undefined,并不是1,就是因為編譯器把var foo = 1拆成了兩句話,一句var foo,一句foo = 1;

結果變成了

var foo;

alert(foo);

foo = 1;

2.函數(shù)提升 > 變量提升

alert(foo());

function foo(){

? ? return 1;

}

var foo = function(){

? ?return 1;

}

按照第一條的理論,還有慣性思維的判斷,后聲明后后提升,這個看起來應該是undefined,結果其實是1.

3.后聲明,后提升

alert(foo());

if(true){

? ? function foo(){ return 1;}

} else {

? ? function foo(){return 2;}

}

這個大家都覺得應該是1吧,其實不是,我們能得出這個結論,是因為我們在看代碼是使用的執(zhí)行視角,但是代碼在運行之前要用編譯器的視角來完成運行路線,所以在上面那段代碼中,編譯器會看到兩段聲明,第二段,覆蓋了第一段。

這就是神奇的js語言。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 第一章: JS簡介 從當初簡單的語言,變成了現(xiàn)在能夠處理復雜計算和交互,擁有閉包、匿名函數(shù), 甚至元編程等...
    LaBaby_閱讀 1,761評論 0 6
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,593評論 19 139
  • 工廠模式類似于現(xiàn)實生活中的工廠可以產生大量相似的商品,去做同樣的事情,實現(xiàn)同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 8,131評論 2 17
  • 剛睡醒,看著窗外的東西都在陽光下,莫名的喜歡這種感覺。我就喜歡陽光下的一切,印象中的小時候大多數(shù)都是在陽光下的。出...
    forYouForUs閱讀 240評論 0 0
  • JavaSAX解析XML第一步:自定義一個類繼承DefaultHandler JavaSAX解析XML第二步:重寫...
    chad_it閱讀 274評論 0 2

友情鏈接更多精彩內容