今天,又由一到題目引發了一場我跟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)}
足以說明函數提升的更兇一些。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com