内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

js闭包所用的场合以及优缺点分析

2017-02-17 17:50 出处:电脑高手网整理 人气: 评论(0

   这篇文章主要介绍了js闭包所用的场合以及优缺点分析,十分的详细使用,有需要的小伙伴可以参考下。

  先上段代码:

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//函数a
function a()
{
var i=0;
//函数b
function b()
{
alert(++i);
}
return b;
}
//函数c
var c = a();
c();

  代码特点:

  1、函数b嵌套在函数a内部;

  2、函数a返回函数b。

  代码中函数a的内部函数b,被函数a外面的一个变量c引用的时候,这就叫创建了一个闭包。有时候函数b也可以用一个匿名函数代替来返回,即return function(){};

  优点:1.保护函数内的变量安全,加强了封装性 2.在内存中维持一个变量(用的太多就变成了缺点,占内存)

  闭包之所以会占用资源是当函数a执行结束后, 变量i不会因为函数a的结束而销毁, 因为b的执行需要依赖a中的变量。

  不适合场景:返回闭包的函数是个非常大的函数

  闭包的典型框架应该就是jquery了。

  闭包是javascript语言的一大特点,主要应用闭包场合主要是为了:设计私有的方法和变量。

  这在做框架的时候体现更明显,有些方法和属性只是运算逻辑过程中的使用的,不想让外部修改这些属性,因此就可以设计一个闭包来只提供方法获取。

  闭包的缺点就是常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。

  总结一下:

  优点:

  1. 逻辑连续,当闭包作为另一个函数调用的参数时,避免你脱离当前逻辑而单独编写额外逻辑。

  2. 方便调用上下文的局部变量。

  3. 加强封装性,第2点的延伸,可以达到对变量的保护作用。

  缺点:

  闭包有一个非常严重的问题,那就是内存浪费问题,这个内存浪费不仅仅因为它常驻内存,更重要的是,对闭包的使用不当会造成无效内存的产生,看下面的例子:

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
var array = [];
function abc() {
var foo = function(){
}
array.push(foo);
return foo;
}
for(var i = 0 ; i < 10000; i ++)
{
abc();
}
 
alert(array[0] == array[1]);

  通过上面的测试我们会看到这一万次abc()执行所产生的同一个逻辑的闭包的地址并不相同,也就是说它生产了一堆的一模一样的Function对象,这样有好处就是可以以工厂模式产生函数以备使用,然而如果你的稍有不慎将闭包当做常态逻辑使用,就不可避免的会造成内存垃圾。当中换个语法可能更好理解:

  ?

1
var foo = new Function();

  所以关于闭包,就我自己的习惯而言,能不用就不用,如果非用不可,那就想办法保持闭包对象的数量很少甚至唯一。

  以上所述就是本文的全部内容了,希望大家能够喜欢。

相关栏目

相关文章



分享给小伙伴们:

评论

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

签名: 验证码: 点击我更换图片

评论列表

    Copyright © 2002-2016 dngsw.cn 电脑高手网 版权所有

    粤ICP备13005586号-3