javascript之闭包基础

来源:互联网 发布:永硕e盘 易语言 源码 编辑:程序博客网 时间:2024/05/16 07:23

闭包基础

function f1() {
var n = 1;
function f2() {
alert(n++);
}
return f2;
}
//闭包:能够访问一个函数内部变量的函数 f2就是一个闭包
var f = f1();//调用f1之后返回闭包函数
f();//1
f();//2*/


//原因:闭包函数引用了外部函数的变量,导致外部函数变量不会立即被回收
//闭包延长了函数内部变量的生命周期


//注意: 函数的参数也是局部变量,也相当于是函数内部声明的一个变量
//闭包可以将外部函数的形参保留到内存中不被释放
function f1(n) {
function f2() {
alert(n++);
}
return f2;
}


var f = f1(1);
debugger;//断点调试,让代码停在这里
f();//1
f();//2
f = f1(1);
f();//1
f();//2


//在浏览器中验证f2是一个闭包
//进入到闭包函数之后,在浏览器右侧出现Closure就是一个闭包结构


//闭包典型的写法
//注意:闭包中使用this 很可能指的是window对象
function f4() {
var n = 1;
return function() {
alert(n++);
alert(this.n);
}
}


var f = f4();
f();//1 undefined 相当于window.f();
f();//2 undefined

var n = 1;
function f2() {
alert(n++);
}
return f2;
}
//闭包:能够访问一个函数内部变量的函数 f2就是一个闭包
var f = f1();//调用f1之后返回闭包函数
f();//1
f();//2


//原因:闭包函数引用了外部函数的变量,导致外部函数变量不会立即被回收
//闭包延长了函数内部变量的生命周期


//注意: 函数的参数也是局部变量,也相当于是函数内部声明的一个变量
//闭包可以将外部函数的形参保留到内存中不被释放
function f1(n) {
function f2() {
alert(n++);
}
return f2;
}


var f = f1(1);
debugger;//断点调试,让代码停在这里
f();//1
f();//2
f = f1(1);
f();//1
f();//2


//在浏览器中验证f2是一个闭包
//进入到闭包函数之后,在浏览器右侧出现Closure就是一个闭包结构


//闭包典型的写法
//注意:闭包中使用this 很可能指的是window对象
function f4() {
var n = 1;
return function() {
alert(n++);
alert(this.n);
}
}


var f = f4();
f();//1 undefined 相当于window.f();
f();//2 undefined
0 0
原创粉丝点击