js-闭包

作者: 索哥来了 | 来源:发表于2017-07-10 18:48 被阅读0次

了解闭包前,先了解变量:局部变量和全局变量。

var m = 100;
function f1(){
    console.log(m);
}
f1() // 100
//m为全局变量
function f2(){
    var n = 100;
}
f2();
console.log(n); //Uncaught ReferenceError: n is not defined
//n为局部变量
// ps:如果在函数里面,没有用var,实际上是定义了一个全局变量。如下:
function f3(){
    j = 100;
}
f3();
console.log(j); //100
//j为全局变量

接下来的问题是,如何从外部获取局部变量:

function f4(){
    var k = 100;
    function f5(){
        alert(k);
    }
    return f5;
}
f4()() //100

如上,f5可以读取f4中的局部变量,那么只要把f5作为返回值,我们就可以在f4外部读取它的内部变量(k)。f5就是闭包。

闭包的用途 :
闭包可以用在许多地方。它的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
使用闭包的注意点:
1.由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露(内存泄漏是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。)。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2.闭包会在父函数外部,改变父函数内部变量的值。

注意:
闭包并不会引起内存泄漏,只是由于IE9之前的版本对JScript对象和COM对象使用不同的垃圾收集,从而导致内存无法进行回收,这是IE的问题,所以闭包和内存泄漏没半毛钱关系。具体看这篇文章

相关文章

  • js-闭包

    对于闭包的理解,一直很浅懂,特别有时候跟匿名函数混淆。所以收集下面各路对于闭包的讲解。 维基百科中的解释:“在计算...

  • js-闭包

  • Js-闭包

    「闭包」 要理解什么闭包,首先要知道闭包为啥出现,实际代码中,我们想在某一的作用域中使用一个变量,很简单,直接在外...

  • js-闭包

    为什么写闭包: 1.被人说复杂,想整清晰.其实很好理解. 2.闭包在开发中用途很多.面试经常问,必须弄懂. 为什么...

  • JS-闭包

    一、闭包简介1、函数内部的函数可以生成闭包2、闭包的应用:需要多个内部变量值3、闭包弊端闭包:会倒致函数运行结束后...

  • js-闭包

    了解闭包前,先了解变量:局部变量和全局变量。 接下来的问题是,如何从外部获取局部变量: 如上,f5可以读取f4中的...

  • JS-闭包

    0.闭包 理解闭包的关键在于:外部函数调用之后其变量对象本应该被销毁,但闭包的存在使得我们仍旧可以访问外部函数的变...

  • js-闭包

    今天学习的概念是闭包一般的计数器需要借助全局变量 var counter = 0; //全局变量function ...

  • JS-闭包

    了解闭包前,首先要知道声明是变量作用域变量根据作用域的不同分为两种:全局变量和局部变量。1.函数内部可以使用全局变...

  • JS-读懂闭包

    长久以来,闭包是前端同学面试必考的问题。会用闭包也成了高级前端开发者的标志,今天就来彻底弄清楚闭包的每一个细节。 ...

网友评论

      本文标题:js-闭包

      本文链接:https://www.haomeiwen.com/subject/cljuhxtx.html