zoukankan      html  css  js  c++  java
  • 浅谈闭包

    浅谈闭包

    首先闭包是处于函数以内,闭包可 以理解为在一个函数内部的函数,并且可以 访问外部函数,相当于函数内部和外部联系 的桥梁。

    闭包是为了重复使用变量,但是又 不变量不被污染。闭包在正式的项目中还是 很常用的。闭包会在它父函数的外部,改变父 

    函数内部的值,所以在使用过程中不要随便 改变父函数内部变量的值;闭包的形成会占 用大量内存,而且使用不当会造成内存泄漏 。

    在操作闭包的时候,要注意闭包的 封闭性。闭包可以实现公有化变量,就是可 以被多个函数调用,但是这种操作需要搭配 立即执行函数

    的相关操作来使用,这样就能 达到想要的效果,立即执行函数的特征就是 用完就销毁,()括号就是立即执行的意思 

    ,例:1.(function (){
    console.log
    ('520');
    })()

    2.(function(){
    console.log
    ('520');
    }());

    立即执行函数还可以被var定义:

    var test = function(){

    console.log 

    ('520');
    }();

    (function(){ ... })() 内部定义的变量不会和外部的变量发生冲突。

    这里要注意,使用立即执行函数的时候要注 意两点一是函数体后面要有小括号(),二是 函数体必须是函数表达式而不能是函数声明 。

    除了()可以立即执行外,+ - ! = 都可以 起到立即执行的左右,这些运算符的作用就 是将匿名函数或函数声明转换为函数表达式

    例如:+function test(fun){

    console.log(fun);

    }(520) //输出520

    立即执行的好处就是通过定义一个匿名函数 ,创建了一个新的函数作用域,相当于创建 了一个“私有”的命名空间,该命名空间的 

    变量和方法,不会破坏污染全局的命名空间 。所以闭包搭配立即执行一起使用时很方便的 ,也很实用。

    总的来说,立即执行函数能够解决闭包中的状态保存问题;定义私有变量,防止全局污染;初始化数据。

  • 相关阅读:
    CMU Database Systems
    Calcite分析
    CMU Database Systems
    CMU Advanced DB System
    笔记
    MyBatis Generator中文文档
    Run Test Case on Spark
    Flex报错Error #2048: 安全沙箱冲突
    看看这个超级有用的一种类型——匿名类型
    Java实战_手把手编写记事本
  • 原文地址:https://www.cnblogs.com/hzqzwl/p/11844408.html
Copyright © 2011-2022 走看看