[TOC]
# 函數與閉包
## 函數調用分類
名稱| 說明
---|---
方法調用 | 通過接收方對象對函數進行調用(包括apply 和 call)
構造函數調用 | 通過 new 表達式對函數進行調用
函數調用 | 以上兩種方式之外的函數調用
## 作用域
作用域指的是名稱(變量名與函數名)的有效范圍。
全局作用域:函數之外(最外層代碼)的作用域。
函數作用域:在函數內進行聲明的名稱擁有的作用域。
## 對閉包的初步認識
閉包的特征:相關的局部變量在函數調用結束之后將會繼續存在。
## 閉包的原理
閉包的前提條件是需要在函數聲明的內部聲明另一個函數(即嵌套的函數聲明)。
```javascript
function f(){
var cnt = 0;
return function(){
return cnt ++;
}
}
f(); // 1
f(); // 2
```
## 防范命名空間的污染
下面的代碼可以利用函數作用域封裝名稱,以及閉包可以使名稱在函數調用結束之后依然存在。
```javascript
(function(){函數體})();