1. 程式人生 > >區別JavaScript函式宣告與變數宣告

區別JavaScript函式宣告與變數宣告

今天,又由一到題目引發了一場我跟JS基礎的較量:首先是

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

or

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

為什麼我調換宣告順序,結果還是輸出以 var 形式宣告的函式的值?
有人回答我說 “啊,變數提升呀…”,我最開始的理解,就算變數提升,第一種情況提升之後,應該是這樣啊:

var getName;
getName = function(){alert(1)};
function getName(){alert(2)};

最後應該輸出 2 才對啊(很理直氣壯)。
殊不知不只有var宣告才會提前,以function fn(){}這種形式宣告的函式,會被提升到作用域的最最頂部,然後再是變數的提升。

具體請看下面例子:

fn();//Uncaught TypeError: fn is not a function
var fn = function(){console.log(1)};

but

fn();//2
var fn = function(){console.log(1)};
function fn(){console.log(2)}

足以說明函式提升的更凶一些。
最後

為了幫助大家讓學習變得輕鬆、高效,給大家免費分享一大批資料,幫助大家在成為全棧工程師,乃至架構師的路上披荊斬棘。在這裡給大家推薦一個前端全棧學習交流圈:

866109386.歡迎大家進群交流討論,學習交流,共同進步。

當真正開始學習的時候難免不知道從哪入手,導致效率低下影響繼續學習的信心。

但最重要的是不知道哪些技術需要重點掌握,學習時頻繁踩坑,最終浪費大量時間,所以有有效資源還是很有必要的。

最後祝福所有遇到瓶疾且不知道怎麼辦的前端程式設計師們,祝福大家在往後的工作與面試中一切順利。