粗談hoisting...
- 詳細內容
- 分類:Javascript
- 發佈:2013-04-04, 週四 17:47
- 點擊數:2770
hoisting 中文是提升的意思。
在 javascript 中 hoisting 指的是 " 一種把宣告提升到其所在區域內頂端的行為"。
意思是,可以在宣告變數前就使用變數。
不過提升行為僅僅只針對宣告部分,對於變數的指定,並沒有跟著被提升。
看一下這小段程式碼:
第一個alert會輸出 undefined,第二個是5。
第一個輸出結果不是5的原因是因為 在function中定義了一個同名的區域變數,
雖然是在後面宣告,不過變數的宣告被提升到該區域的頂端了,
當然只有宣告部分(var x),至於指定值得部分(x=10)並沒有跟著被提升。
所以會有undefined的結果。
hoisting的行為不僅是針對變數,函式也是如此。不過有一點不一樣。
函式的建立有幾種方式,一般進行hoisting時都與變數相同,宣告部分被hoisting,而指定部分則沒有被hoisting。
但有一種例外,那就是用宣告式建立的函式。
用這種方式形成的函式,不僅是宣告,連其定義也被hoisting到頂端了。
這也造成了javascript中常被提到的,函示可以先使用後宣告的特性。
下面程式碼顯示出宣告式函式特殊的hoisting行為:
提到hoisting難免要稍微提一下變數的有效範圍。
特別要一提的是javascript並沒有{}作用域的觀念,
也就是說你在if(1){var x=10;}中的x,是個全域變數。
程式碼如下:
如果我沒記錯的話,javascript只有在函式內才能有其所屬的作用域。
(所以在javascript中都是用函式來模擬命名空間)
還有所有沒經過var 宣告的變數,都是全域變數。
按個讚!~支持本站!~
你可能會有興趣的文章
- Date.setMilliseconds()設定日期中的毫秒
- 關於函式的一個小觀念
- Date.setHours()設定得日期中的小時
- Date.setFullYear()設定得日期中的年
- Date.setDate()設定得日期中的日
- 使用javascrip改變文字顏色