• js闭包之应用场景


    闭包的解释

    当函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域之外执行,这时就产生了闭包

    在javascript中,只有函数内部的子函数才能读取局部变量,所以说,闭包可以简单理解成“定义在一个函数内部的函数“。所以,在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

      闭包的特点:

      1) 作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
      2) 一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
      简单的说,javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。

    闭包应用场景

    1.setTimeout

    setTimeout(func,time)这里的func不能带参数,解决这个问题需要用闭包

    function func(param) {
        return function() {
            alert(param);
        }
    }
    var f = func(1)
    setTimeout(f, 1000);

    2.代替全局变量

    //闭包,test2是局部变量,这是闭包的目的
    //我们经常在小范围使用全局变量,这个时候就可以使用闭包来代替。
    (function(){
    var test2=222;
    function outer(){
        alert(test2);
    }
    function test(){
        alert("测试闭包:"+test2);
    }
    outer(); //222
    test(); //测试闭包:222
    }
    )(); 
    alert(test2); //未定义,这里就访问不到test2

    3.为节点循环绑定click事件,在事件函数中使用当次循环的值或节点,而不是最后一次循环的值或节点

    4.创建特权方法用于访问控制

    使用闭包的注意点

    (1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

    (2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

  • 相关阅读:
    linux学习笔记--20150122
    破解LR11 sentinel stage failed
    Linux部署环境初学(Resin、jdk)
    MongoDB操作
    TestNG
    在iOS8 下用Swift 创建自定义的键盘
    iOS 8下简单,可交互式的通知
    设计模式:策略模式
    用Swift创建一个自定义,可调整的控件
    iOS7状态栏上有趣的渐变遮罩
  • 原文地址:https://www.cnblogs.com/raind/p/9328243.html
Copyright © 2020-2023  润新知