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) ---不能随便改变父函数内部变量的值
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 常见的闭包问题的解决办法
- javascript中运用闭包和自执行函数解决大量的全局变量问题
- 浅谈JavaScript中的作用域和闭包问题
- Javascript的setTimeout()使用闭包特性时需要注意的问题
- Javascript作用域、闭包原理以及性能问题
- 举例详细说明javascript作用域、闭包原理以及性能问题
- Javascript作用域、闭包原理以及性能问题
- JavaScript绑定事件时的闭包问题
- 如何理解Javascript中的闭包问题
- 细品javascript 寻址,闭包,对象模型和相关问题
- JavaScript闭包-循环添加onfocus事件出问题
- Javascript的setTimeout()使用闭包特性时需要注意的问题
- javascript中的闭包问题
- javascript的闭包问题
- Javascript作用域、闭包原理以及性能问题
- JavaScript绑定事件时的闭包问题
- 举例详细说明javascript作用域、闭包原理以及性能问题
- (Javascript) 猴子也明白 之 闭包超级入门 1 问题
- 从javascript的循环问题来看待闭包本质
- JavaScript的闭包问题