variable hoisting變數提公升是js比較有特點的地方,它允許你先使用變數,在其後面再進行變數宣告,不會丟擲 uncaught referenceerror異常。雖然變數被提公升到前面,但是它的預設值則是undefind,在引用的時候也使用這個值,知道在其面後進行賦值,在使用時候即為所贖的值。
舉個例子:
基於這個原因,在平時編寫**時候,盡量把變數宣告放到**塊最頂層位置,可以使**結構清晰。console.log(x)
//如果後面不定義x 則丟擲"referenceerror: x is not defined
//如果後面對x定義 則列印出undefined
var x = 2
var abc = "abcd";
(function())()
//上面**可以這樣翻譯
var x;
console.log(x)//undefined
var x = 2
var abc = "abcd";
(function())()
注意的是,在es6語法中新增的let or const 宣告方式,並不支援這種變數提公升,強行使用會丟擲錯誤referenceerror
對於函式提公升,只用函式的宣告被提公升,表示式則不會被提公升
/* 函式宣告 */
foo(); // "bar"
function foo()
/* 函式表示式 表示式定義的函式,稱為匿名函式。匿名函式沒有函式提公升。*/
baz(); // typeerror: baz is not a function
//此時的"baz"相當於乙個宣告的變數,型別為undefined。
由於baz只是相當於乙個變數,因此瀏覽器認為"baz()"不是乙個函式。
var baz = function() ;
Javascript 函式和變數提公升
變數提公升和函式提公升基本上是面試必問題目 先從乙個面試題說起 console.log a if a function a console.log a a 複製 下面我們針對這個栗子解析一下 我們知道變數和函式定義都會提公升到作用域最前邊 唯一需要確認的是變數和函式的先後順序 我們預想 函式是用第一...
Javascript 函式和變數提公升
變數提公升和函式提公升基本上是面試必問題目 先從乙個面試題說起 console.log a if a function a console.log a a 複製 下面我們針對這個栗子解析一下 我們知道變數和函式定義都會提公升到作用域最前邊 唯一需要確認的是變數和函式的先後順序 我們預想 函式是用第一...
七 JavaScript 變數的提公升
pid demo p script 變數的提公升 函式宣告和變數宣告總是會被直譯器悄悄的被提公升到方法的最頂部 在js中函式及變數的宣告都將被提公升到函式的最頂部,變數可以在使用後宣告,也可以先宣告再使用 js只有宣告的標量會提公升,初始化的不會被提公升 x 5 elem document.gete...