JavaScript解釋執行並非我所想的簡單粗暴__JavaScript

來源:互聯網
上載者:User

最近同事在寫修改一個js的時候在ajax回呼函數中取外層變數為undefined,範例程式碼如下:

function a(){   var amount=18;   $.post("/Charges/SelfPayment/KeepConn", function(data){      alert(amount);  //彈出undefined      if(true){          var amount=19;      }      alert(amount);//彈出19   });}a();

即使是在ajax回呼函數中第一行alert出這個外層變數取得仍然為undefined,我查看代碼後發現,除了這個變數其他都正常取到值,於是我仔細排查這個變數本身的問題,依據範圍排除掉全域變數影響的原因,回呼函數中有地方定義新變數,名稱和要訪問的外層變數同名,考慮到js為解釋型語言,沒太在意在我alert之後定義的變數,後來發現屏蔽掉這個同名變數的聲明後則正常。


度娘告訴我,這叫:  變數聲明提升(hoisting) ,即將變數的定義提升到解釋執行前(函數也屬於變數),這裡需要注意的是“提升”的僅僅是定義,所以上述樣本中第一個alert彈出的是undefined而不是19,因為以前沒好好的學這些底層的東西,憑自己的想象覺得解釋就是簡單粗暴的一行行執行。

另外由於js沒有沒有塊級範圍,所以在if語句中定義的變數在if以外也可以訪問

相關文章

聯繫我們

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