# 闭包
1. 什么是闭包
2. 简述闭包的作用
3. 下面代码的执行结果是什么  为什么
   ```
   function fn1() {
        var name = 'iceman';
        function fn2() {
            console.log(name);
        }
	    fn2();
    }
    fn1();

   ```

4. 下面代码的执行结果是什么 为什么
   ```
    function fn1() {
        var name = 'iceman';
        function fn2() {
            console.log(name);
        }
        return fn2;
    }
    var fn3 = fn1();
    fn3();

   ```

5. 下面代码的执行结果是什么 为什么
   ```
    function fn1() {
        var name = 'iceman';
        function fn2() {
            console.log(name);
        }
        fn3(fn2);
    }
    function fn3(fn) {
        fn();
    }
    fn1();
   ```
6. 下面代码的执行结果是什么 为什么
   ```
    function waitSomeTime(msg, time) {
        setTimeout(function () {
            console.log(msg)
        }, time);
    }
    waitSomeTime('hello', 1000);
   ```

7. 下面代码的执行结果是什么 为什么
   ```
   for (var i = 1; i <= 10; i++) {
        setTimeout(function () {
            console.log(i);
        }, 1000);
    }

    ```

8. 怎么才能在第7题中输出 1-10
9. 下面代码的执行结果是什么 为什么
```
function module() {
	var arr = [];
	function add(val) {
		if (typeof val == 'number') {
			arr.push(val);
		}
	}
	function get(index) {
		if (index < arr.length) {
			return arr[index]
		} else {
			return null;
		}
	}
	return {
		add: add,
		get: get
	}
}
var mod1 = module();
mod1.add(1);
mod1.add(2);
mod1.add('xxx');
console.log(mod1.get(2));

```

10. 下面代码的执行结果是什么 为什么
```
var a = 10
function foo(){
    console.log(a)
}

function sum() {
    var a = 20
    foo()
}

sum()
```

11. 下面代码的执行结果是什么 为什么
```
var n = 10
function fn(){
    var n =20
    function f() {
       n++;
       console.log(n)
     }
    f()
    return f
}

var x = fn()
x()
x()
console.log(n)

```

12. 简述闭包形成的原因
13. 下面代码的执行结果是什么 为什么
```
var a = 0
function foo(){
    var b =14
    function fo(){
        console.log(a, b)
    }
    fo()
}
foo()
```

14. 下面代码的执行结果是什么  为什么
```
var n = 10
function fn(){
    var n =20
    function f() {
       n++;
       console.log(n)
     }
    return f
}

var x = fn()
x()

```

15. 下面代码的执行结果是什么 为什么
```
var a = '林一一'
function foo(){
    var a = 'foo'
    function fo(){
        console.log(a)
    }
    return fo
}

function f(p){
    var a = 'f'
    p()
}
f(foo())

```