当一个函数执行时,形成了一个私有作用域,保护里面的私有变量不受外界的干扰,这种机制就叫做闭包。大部分人口中的闭包是当一个函数执行的时候,里面有一个引用数据类型被外界占用了,形成了不销毁作用域。一说闭包是指有权访问另一个函数作用域中的变量的函数。而创建闭包的常见方式,就是在一个函数内部创建另一个函数。
function fn(x){
return function(y){
return x+y;
}
}
var f=fn(1);
闭包的作用
保护
保护自己私有作用域中的私有变量不受外界的干扰。
在真实项目中,通常都是多人协作开发,应该尽量的减少全局变量的污染,防止代码的冲突。可以把自己所写的内容封装到闭包中,形成私有变量。
var m=6;
function fn(){
var m=7;
console.log(m);
}
console.log(m);
保存
形成不销毁的作用域,可以把里面的变量保存下来。
function fn(x){
return function(y){
return x+y;
}
}
var f=fn(1);
f(2);
暴露给全局
当自己写了一个很好的功能时,可以暴露到全局以提供给更多的人使用。
给window对象添加属性
(function(){
function JQuery(){
}
window.JQuery=window.$=JQuery;
})();
//调用方法
JQuery();
$();
返回一个对象
在外面用一个变量进行接收自执行函数通过return返回的结果。
var utils=(function(){
var num=0;
function fn1(){
}
return {
fn1:fn1
}
})();
//调用方法
utils.fn1();