前端笔记—从入门到坟墓[js][闭包][2]

闭包(closure)理解:

一个普通的函数体代码段在调用时,会随之生成一个局部上下文环境,而这个函数体代码段执行完毕后,这个上下文环境也会随之被销毁。
而一个有闭包函数体代码段在调用时,生成的上下文环境不会在其执行完毕后销毁,而是被其返回对象(函数)继续使用。

特点

闭包函数执行时,生成独立的局部作用域的上下文环境,所以即使是同一闭包函数生成的同名变量,他们存储的位置也是不同的,相互独立的。

优缺点

闭包优点:缓存独立的数据(即使变量名相同),延长作用域链
闭包缺点:因为其特点,增加了内容的开销,资源浪费,不利于垃圾回收机制。

闭包分为两种

返回值(函数或对象)闭包

利用局部作用域变量做闭包,缓存不同的独立数据。

 function fn(){
	var num = 10
    return function (){
    	num++
        console.log(num)
    }
}
var f = fn()
f()
var f2 = fn()
f2()

参数闭包

利用参数缓存形成闭包,延长作用域链到异步函数执行完毕。

	  for(var i = 0;i<3;i++){
		fn(i)//1,2,3
      }
      function fn(i){
        setTimeout(function(){
          console.log(i)
        },0)
      }

猜你喜欢

转载自blog.csdn.net/qq_29018891/article/details/88183987