f2函数就是闭包

闭包最大的特点,就是它可以“记住”诞生的环境

闭包的最大用处

  • 可以读取函数内部的变量
  • 让这些变量始终保持在内存中,即闭包可以使得它诞生环境一直存在。
  • 封装对象的私有属性和私有方法、

    读取函数内部变量

    1. function f1(){
    2. var n=999;
    3. function f2(){
    4. console.log(n);
    5. }
    6. return f2;
    7. }
    8. var result=f1();
    9. result()//999

    让变量始终保持在内存中

    ```javascript function createIncrementor(start){ return function(){
    1. return start++;
    } }

var inc=createIncrementor(5) inc() //5 inc() //6 inc() //7

  1. start 是函数createIncrementor 的内部变量,通过闭包,start状态被保留。闭包可以看着是函数内部作用域的一个接口
  2. <a name="OlEIU"></a>
  3. #### 封装对象的私有属性和私有方法
  4. ```javascript
  5. function Person(name){
  6. var age;
  7. function setAge(n){
  8. age=n;
  9. }
  10. function getAge(){
  11. return age
  12. }
  13. return {
  14. name:name,
  15. getAge:getAge,
  16. setAge:setAge
  17. };
  18. }
  19. var p1=Person('张三')
  20. p1.setAge(25)
  21. p1.getAge() //25