javascript之闭包
在内存中,分为三部分:池、栈、堆
常量在池中 var a="ss"中的 “ss”,
变量在栈中,比如 var a,var b
对象在堆中,比如 function aa(){}
整个内存相当于一个大世界,世界的名字叫window, 所有在全局中定义的变量var 和function都属于window
每个function,就相当于一个临时开辟的小世界,整个小世界里面也有栈和堆,它定义的变量和函数都在相应的栈和堆里面。它的作用域称为内部作用域
我们可以在内部作用域访问到外部的作用域,即全局里面的变量
那么如果我们想在外部作用域访问到内部作用域的变量,该如何做呢,这时就要用到闭包
代码:
1 var a="ss" 2 function test(){ 3 var b="s1" 4 alert(a) //ss 5 } 6 7 alert(b) //出错
使用闭包
var a="ss" function test(){ var b="s1" return function(){ alert(b) } } //获取内部变量b var t=test() t() //或者 test()()
闭包被调用的时候,之前对象的内存空间就不会消除,因为有闭包
闭包的作用:
1、外部作用域可以访问到内部作用域的变量
2、保证内部作用域的变量不被污染(这一点尤其在扩展插件的时候用的多,比如(function(){插件的代码}()),这就是一个闭包)