对于一个个刚刚接触前端的新手,天天听人讲闭包,听的那个高大尚,心中对各位技术大佬是那个的膜拜,于是做为前端菜鸟的我,就去了解了传说中的闭包。
何为闭包?
通俗易懂的讲,就是可以调用函数内部的变量和方法
举例说明如下:
function test(){
var x = 1;
var y = 2;
function func1(){
x++;
console.log("x:"+x);
}
function func2(){
y++;
console.log("y:"+y);
}
func3 = function(){
console.log("x+y:"+(x+y));
}
return {
func1:func1
}
}
var obj1 = test();
obj1.func1();//输出x:2
obj1.func1();//输出x:3
func3();//输出x+y:5
var obj2 = test();
obj2.func1();//输出x:2
obj2.func1();//输出x:3
obj2.func1();//输出x:4
func3();//输出x+y:6
obj1.func1();//输出x:4
func3();//输出x+y:6
解析:你可以把test理解成一个对象,首先建立一个obj1对象,这个时候调用obj1.func1()时,test中的x会被累加,这个就是闭包的一个特点,就是外部可以改变函数内部的变量值,这里要记住一点,只有在test中return返回的函数在外部才能被调用,如果此时调用obj1.func2()会提示出错的,只有跟func1一样在return中返回才能被外部调用;func3可以理解为公有的函数,但是只有在声明完test之后才能被调用,因为func3第一次定义是在test中定义的,所有要先test()之后才能被调用;obj2是新建立的一个对象,此时的obj1和obj2两个对象是互不干扰的,各自叠加,这也是闭包的一个特性,可以用在以后建立多个计时器时使用闭包,事半功倍;这里要特别强调一下func3这个函数,第一个func3调用的是对象obj1中的func3,而当obj2新对象声明之后,func3调用的就是obj2中的func3了
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。