Theme NexT works best with JavaScript enabled

ShunNien's Blog

不積跬步,無以致千里;不積小流,無以成江海。

0%

JavaScript 函式的 Hoisting

前言

在看JavaScript 設計模式這本書的時候,覺得這邊整理得很好,想要筆記一下。

函式的 Hoisting

JavaScript 在函式(function)有兩個重要特色

  1. 函式是個物件
  2. 函式提供一個作用域

而 Hoisting 特色就是函式(function)跟變數一樣,也有 Hoisting 的特性,就是所有宣告的動作皆會提升至該作用域的頂端,而函式(function)比較需要注意的是,函示宣告式(如下所示)也是有這特性的

函示宣告式
1
function foo() {}

另外比較需要注意的是,使用表示式的函式

表示式
1
var foo = function () {};

使用表示式其 Hoisting 的只有該變數,跟變數相同,函式(function)尚未定義,如以下範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(function (){
// foo is function
console.log('foo is ' + typeof foo);
// bar is undefined
console.log('bar is '+ typeof bar);

foo(); // foo

// Uncaught TypeError: bar is not a function(…)
bar();

function foo(){
console.log('foo');
}

var bar = function(){
console.log('bar');
}
}());

參考資料

JavaScript 設計模式

歡迎關注我的其它發布渠道