# 闭包 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()) ```