匿名函数
匿名函数:就是没有函数名的函数。
1 | //普通函数 |
闭包
闭包的英文单词是closure,这是JavaScript中非常重要的一部分知识,因为使用闭包可以大大减少我们的代码量,使我们的代码看上去更加清晰等等,总之功能十分强大。
闭包的含义:闭包说白了就是函数的嵌套,内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕(这点涉及JavaScript作用域链)。
使用闭包有一个优点,也是它的缺点:就是可以把局部变量驻留在内存中,可以避免使用全局变量。
1 | function a(){ |
匿名函数最大的用途是创建闭包(这是JavaScript语言的特性之一),并且还可以构建命名空间,以减少全局变量的使用。
闭包的经典案例
通过全局变量来累加
1 | var num=0; //全局变量 |
每次调用,变量num都会被初始化,所以每次调用都会返回1而不是累加。我们可以用普通函数内部嵌套匿名函数,形成一个闭包来使变量驻留在内存中。
使用闭包进行累加
1 | function a(){ |
注意 闭包允许内层函数引用父函数中的变量,但是该变量是最终值
看下面的例子
1 | /** |
你会发现当鼠标移过每一个
注意事项里已经讲了(最终值)。
显然这种解释过于简单,当mouseover事件调用监听函数时,首先在匿名函数(function(){ alert(i); })
内部查找是否定义了 i,结果是没有定义;因此它会向上查找,查找结果是已经定义了,并且i的值是4(循环后的i值);所以,最终每次弹出的都是4。
解决方案一
1 | var lists = document.getElementsByTagName('li'); |
解决方案二
1 | var lists = document.getElementsByTagName('li'); |
解决方案三
1 | function eventListener(list, index){ |