什么是闭包:
闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变量和方法传递到外部。
闭包的特性:
1.函数内再嵌套函数
2.内部函数可以引用外层的参数和变量
3.参数和变量不会被垃圾回收机制回收
例如://li 节点的onclick事件都能正确的弹出当前被点击的li索引
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <ul id = "testUL"> <li>index = 0</li> <li>index = 1</li> <li>index = 2</li> <li>index = 3</li> </ul> </body> </html> <script> var nodes = document.getElementsByTagName('li'); for(i = 0;i<nodes.length;i+=1){ nodes[i].onclick = (function(i){ return function(){ console.log(i); }//如果不使用闭包的话,值每次都是4 })(i); } </script>