您的位置:首页 > Web前端 > JavaScript

javascript中的闭包问题

2017-10-10 18:10 197 查看
【一】在理解闭包之前首先对JavaScript中的变量和作用域进行了解:

1.js在函数内部直接读取全局变量

2.在函数外部无法读取函数内部的局部变量

3.在函数内部声明变量的时候,一定要使用var,如果不用,实际上声明了一个全局变量

【二】从外部读取局部变量?

在函数的内部,再定义一个函数

function f1(){
var n=999;
function f2(){
alert(n);
}
return f2;

}

var c= f1();

c();//999外部可以访问局部变量

对上述函数创建过程的解释:

【1】定义了一个普通函数f1();

【2】在f1中定义了一个普通函数f();

【3】在f1中返回f2(在f1中返回f2的引用);

【4】执行f1,把f1的返回结果赋值给变量c;

【5】执行c();
闭包的定义:

函数A的内部函数B被函数A外的一个变量C引用

闭包:当一个内部函数被其外部函数之外的变量引用时,就形成了闭包。

能够读取其他函数内部变量的函数。

【三】闭包的特性:

1.函数嵌套函数

2.函数内部可以引用外部的参数和变量

3.参数和变量不会被垃圾回收机制回收

【四】闭包的用途:

1、可以直接读取函数内部定义的变量

2、让这些变量的值始终保存在内存中

function f1(){

var n=999;

nAdd=function(){n=n+1};

function f2(){

alert(n);

}; 

return f2;

}

【五】闭包使用的注意点

1、闭包会使函数中的变量都被保存在内存中,内存消耗大,所以不能滥用,

否则会造成网页的性能问题,内存泄漏。---解决方案:在退出函数之前,将不使用的局部变量全部删除

2、闭包会在父函数外部,改变父函数内部的变量值,如果把父函数当作对象使用,把闭包当作它的公用方法(public),

内部变量相当于私有属性(private value) ---不能随便改变父函数内部变量的值

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript 闭包