闭包有三个特性:
1.函数嵌套函数
2.函数内部可以引用外部的参数和变量
3.参数和变量不会被垃圾回收机制回收
闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量
使用闭包有一个优点,也是它的缺点,就是可以把局部变量驻留在内存中,可以避免使用全局变量。全局变量在每个模块都可调用,这势必将是灾难性的。
1.举个简单例子
var abc = (function () { //abc为外部匿名函数的返回值 var a = 1; return function () { a++; alert(a); } })(); abc(); abc(); abc();
2.闭包实际运用
//普通实现 //window.onload = function () { // var ali = document.getElementsByTagName("li"); // for (var i = 0; i < ali.length; i++) // { // ali[i].onclick = function () { // alert(this.innerHTML); // }; // } //}; //闭包实现 window.onload = function () { var ali = document.getElementsByTagName("li"); for (var i = 0; i < ali.length; i++) { (function (i) { ali[i].onclick = function () { alert(this.innerHTML) }; })(i); } };
3.使用闭包实现封装
var Person = function () { var name = "default"; return { getName: function () { return name; }, setName: function (newName) { name = newName; } }; }; var p1 = new Person(); console.info(p1.getName()); p1.setName("newName"); console.info(p1.getName());