JS闭包那些事
关于闭包,我曾经一直觉得它很讨厌,因为它一直让我很难搞,不过有句话怎么说来着,叫做你越想要一个东西,就要装作看不起它的样子。所以,抱着这个态度,我终于掳获了闭包。 首先来认识一下什么是闭包,闭包,一共有三大特征: 1 函数嵌套函数 2 内部的函数可以引用外部函数的参数和变量 3 参数和变量不会被垃圾回收机制所收回 举个栗子: function aaa(){ var b = 5; function bbb(){ b++; alert(b); } } aaa(); 这个栗子就是很明显的闭包,函数里面嵌套函数,同时内部的函数bbb又可以访问到外部函数aaa中的变量,至于第三个特征,我们都知道在JS解析机制中,函数内的变量在函数调用完后会被销毁,但在这里b并没有被销毁,因为他还会被里面的函数bbb引用,那么怎么证明呢? 首先,我们要注意,在上面这个栗子中,是不会弹出值的,因为里面的函数bbb,只是声明了,并没有被调用,我们都知道,函数它不会主动执行的,那么怎么执行呢,看下面: function aaa(){ var b = 5; function bbb(){ b++; alert(b); // 6 } return bbb; } var c = aaa(); // 此时aaa被执行 同时把返回结果bbb 赋给c c(); //6 将里面的函数作为返回结果,然后可以调用,这种经常会遇见