9、闭包

  • 函数嵌套
  • 内部函数使用外部函数的局部变量
  • 优点:延长外部函数局部变量的生命周期;缺点:内存泄漏
  • 合理使用闭包,及时销毁
function fun(n,o){
  console.log(o)        //执行var a = fun(0)时候o没有定义,undefined
  return {
    fun:function(m){
      return fun(m, n);            //这个fun是window的fun也就是全局的fun
    }
  }
}

//a中存的是同一个返回方法,是同一个fun(m,n),此时存的n都是第一次的0,后面也只是改m所以n都是0,o打印都为0
var a = fun(0)            //结果给a赋值返回一个对象{fun:function(){...}}
a.fun(1)                //0
a.fun(2)                //0
a.fun(3)                //0

//注意这里区别于上面,这里每次执行完之后保存的n都是上一次返回的n
var b = fun(0).fun(1).fun(2).fun(3)        //undefined 0 1 2

//同理:
var d = fun(0).fun(1).fun(2).fun(3).fun(67).fun(45)  //undefined 0 1 2 3 67


var c = fun(0).fun(1) //undefined 0 此后c上的n保存变成了1

c.fun(2)        //1
c.fun(3)        //1

results matching ""

    No results matching ""