闭包:闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的常见的方式,就是在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量。
在搞闭包之前,先了解几个匿名函数使用方法
例一:
//匿名函数赋值给变量
var test = function(){
return 'haha';
};
alert(test);//返回的是整个function的代码
alert(test());//返回haha
例二:匿名函数如果直接执行是无法执行的,会提示没有函数名的错误信息
//匿名函数的自我执行 语法是 (匿名函数)();
(function(){
alert('匿名函数执行');
})();
//将匿名函数自我执行的返回值赋值给一个变量
var test = (function(){
return "test";
})();
alert(test);//返回test
//自我执行后用alert打印
alert((function(){
return "test";
})());
例五:
//匿名函数传参
(function(value){
alert(value);
})(500);
例六:
//获取函数里的函数的返回值
function test(){
return function(){
return "xxc";
}
}
alert(test);//返回的是两层参数的代码
alert(test());//返回的是里面那个function的代码
alert(test()());//返回的是第二个函数的返回值xxc,以此类推
//获取函数里的函数的返回值,推荐用这个先将外层函数执行结果赋值给一个变量,然后再执行这个变量
var a = test();//获取test里return的那个函数的代码
alert("a-->"+a());//执行那个获取的函数
例七:闭包
//如果要使得下面函数完成自增功能,并且在函数外边能获取到值,这时候就需要使用到闭包()
function test(){
var age = 0;
return function(){
age++;
return age;
};
}
alert(test()());//返回1
alert(test()());//返回1,因为每次都先初始化age的值
var a = test();
alert(a());//只执行自增部分的函数,初始化参数的函数只执行一次,后面不重复执行 返回1
alert(a());//返回2
a = null;//解除引用,等待垃圾回收