js基礎變量提升 函數聲明和函數表達式

今天看見一個很有趣的問題,是一個面試題的小題。
之前那前端隨筆也有提到,在這裏算是再總結一下。

getName();//1
var getName = function () { alert (4);};
getName();//2
function getName() { alert (5);}
getName();//3

函數聲明在JS解析時進行函數提升,因此在同一個作用域內,不管函數聲明在哪裏定義,該函數都可以進行調用。
而函數表達式的值是在JS運行時確定,並且在表達式賦值完成後,該函數才能調用。
所以在js解析時,會先將聲明變量放到最前面進行解析。var getName; 此時getName 爲undifined。而函數申明在生效的作用域內,無論哪裏都可以調用。
所以,代碼的輸出分別是:1的位置是5,2的位置是4,3的位置是4.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章