JavaScript變量提升和函數聲明:為什么這段代碼輸出10而不是12?

JavaScript變量提升和函數聲明:為什么這段代碼輸出10而不是12?

深入解析JavaScript變量提升和函數聲明的優先級

這段JavaScript代碼的執行結果可能出乎意料:為什么最終打印的a值為10?讓我們詳細分析:

var a = 10; {     a = 11;     function a() {}     a = 12;     function a() {}     a = 15; } console.log('a: ', a);

JavaScript引擎在代碼執行前會進行預處理,將變量聲明和函數聲明提升到作用域頂部。

首先,var a = 10;聲明了一個全局變量a并賦值為10。

進入代碼塊{}。關鍵在于function a() {}的聲明。在JavaScript中,函數聲明會被提升到作用域頂部,優先于變量賦值。這意味著在代碼塊內部,a不再是數值變量,而是函數。

立即學習Java免費學習筆記(深入)”;

因此,a = 11;、a = 12;和a = 15;實際上都是對函數a進行賦值操作,這不會改變a的函數本質,也不會影響全局變量a的值。

最后,console.log(‘a: ‘, a);打印的是全局變量a的值。由于全局變量a在代碼塊內沒有被var重新聲明,它的值仍然是初始值10。

總結: 代碼塊內部的a被函數聲明覆蓋,對它的賦值操作不會影響全局變量a。因此,console.log(‘a: ‘, a)打印的是全局變量a的初始值10。 之前的分析存在錯誤,正確結果為10。

以上就是JavaScript變量提升和函數聲明:

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享