闭包函数是指有权访问另一个函数作用域中的变量的函数,(函数中的函数)
创建闭包函数最常见的方式是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,如下所示:
function fn1(){
function fn(){
}
return fn;
}
这种函数的嵌套方式就是闭包函数,目的是为了:
1.可以在函数外部读取函数内部成员
2.让函数内成员始终存活在内存中,让函数整体不至于因为函数的执行完毕而被销毁。
但是还有这种写法:
(function(i){
console.log(i);
})(i);
这种自调用的写法本质上来讲也是一个闭包函数。
通过这种闭包函数,我们可以有效的避免变量污染等问题,从而创建一个独立的作用域。
访问这个立即执行函数中的变量或者方法,我们就需要通过第二个括号将window这个全局的变量对象传入,并且将需要外部访问的变量或者函数赋值给window
(function (window){
var a = 10; // 私有属性
function show(){
return a++;
}
function sayHello(){ // 私有方法
alert("hello,world");
}
window.show = show;// 将show方法暴露在外部
})(window);
总结:
闭包的特点:
1函数嵌套函数,
2 函数内部可以引用外部的参数和变量
3 让函数内成员始终存活在内存中,让函数整体不至于因为函数的执行完毕而被销毁。
闭包的优点:
1 希望一个变量长期驻扎在内存中
2 避免全局变量的污染
3 私有变量存在
闭包的实现:
1 函数嵌套函数
2 外层函数返回内层函数
3 外面有一全局变量接受外层函数