[TOC]
# 函数与闭包
## 函数调用分类
名称| 说明
---|---
方法调用 | 通过接收方对象对函数进行调用(包括apply 和 call)
构造函数调用 | 通过 new 表达式对函数进行调用
函数调用 | 以上两种方式之外的函数调用
## 作用域
作用域指的是名称(变量名与函数名)的有效范围。
全局作用域:函数之外(最外层代码)的作用域。
函数作用域:在函数内进行声明的名称拥有的作用域。
## 对闭包的初步认识
闭包的特征:相关的局部变量在函数调用结束之后将会继续存在。
## 闭包的原理
闭包的前提条件是需要在函数声明的内部声明另一个函数(即嵌套的函数声明)。
```javascript
function f(){
var cnt = 0;
return function(){
return cnt ++;
}
}
f(); // 1
f(); // 2
```
## 防范命名空间的污染
下面的代码可以利用函数作用域封装名称,以及闭包可以使名称在函数调用结束之后依然存在。
```javascript
(function(){函数体})();