今天,又由一到題目引發了一場我跟JS基礎的較量:首先是
var getName = function(){alert(1)};function getName(){alert(2)};getName();// 1or
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 functionvar fn = function(){console.log(1)};but
fn();//2var fn = function(){console.log(1)};function fn(){console.log(2)}足以說明函數提升的更兇一些。
新聞熱點
疑難解答
圖片精選