闭包相关: 闭包——就是函数内部的子函数,每一个子函数都是一个闭包
闭包一个重点是 立即执行和除了传的参数不让其他参数改变影响内部变量
闭包函数运行一次后内部定义的局部变量会被保存在内存中,运行后不销毁,再次运行闭包就接着用内存中的变量
function a(){
var n=1;
b =function(){ //匿名函数b
alert(n++);
}
c =function(){
alert(n++);
}
return b;
}
var x = a(); 先运行一次外层,所有的内层闭包就都申明了(因为都是全局变量),所以在外部就都可以访问了
c();
function foo(x) {
var tmp = 3;
a=function (y) { //匿名函数
alert(x + y + (++tmp));
}
return a;
}
var bar = foo(2);
a(10); //16 然后将内部的tmp改为了4
a(10); //17 继续运行闭包函数,此时++tmp为 ++4是5
function foo1(x) { //这里的外层函数不能和上面的同名,不然返回值是 有名函数,覆盖上面的匿名函 数,在a();调用就出错了
var tmp = 3;
return function b(y) {
alert(x + y + (++tmp));
}
}
var bar = foo1(2);
// b(10); 错 返回值函数名和函数不一样,返回函数就不能通过函数名调用
bar(10); // 16 对
bar(10); //17 对
//函数的表现形式
(function(i){ //函数1 等于下面的函数2
alert(i);
})(i);
function a(i){ //函数2
alert(i);
};
a(i);