闭包 : 函数定义时,保存其作用域中的变量 利用函数作用域的特性,函数内部可以访问函数外部(上一层作用域)的变量 闭包的意义: 在于 在非函数创建的位置,访问函数创建位置的变量 闭包的作用: 1.变量的声明周期 (延长局部变量的生命周期) 2.变量的作用域 (封装私有变量) 作用域的注意点: 1.每个函数都有自身的this ,arguments,无法访问外层函数作用域中的。 2. 闭包函数执行时,参数或局部变量会覆盖闭包引用的变量 3.闭包引用变量时,保存的是引用。 引用的值(基本类型)可能在外部发生变化,如果需要将变量的值作为常量,需要将 引用转化为值时, 利用 call-by-shall 特性 思路:引用——》传入自执行匿名函数——>传参特性——》值 闭包与对象的比较 层叠 1.闭包: 在过程中以环境的形式包含了数据 2.对象: 以方法的形式包含了过程 面向对象与函数式比较: 一个以数据为中心 一个以函数为中心 一个用数据包含函数 一个以函数的形式包裹数据 一般对象中只含有一个方法,就闭包替代比较合适。 有多个方法时,用面向对象组织代码结构比较合适 面向对象可以实现的功能,函数式也可以实现。只是实现的角度的不同 性能比较
闭包:实例化速度慢,调用速度快
对象:实例化速度快,调用速度慢
******************************************************************************************************************
对闭包的误解:当需要延长一个变量的生命周期时,使用闭包,不应该被认为是浪费内存。其他方式也是讲变量保存在内存中
闭包和内存泄露
   IE bug:循环引用, 引用计数策略无正确处理循环引用。 
1.两个对象相互引用 2.DOM事件处理函数引用了DOM节点(也是循环引用)
           function foo(element, a, b) {
element.onclick=function(){/*usesaandb*/};
                    }   
        解决方法:
           function foo(element, a, b) {
element.onclick=bar(a,b);
}

functionbar(a,b){
returnfunction(){/*usesaandb*/}
                    }   
   
优质内容筛选与推荐>>
1、(二)进阶练习____2、执行网络操作——管理网络的使用情况-Managing Network Usage
2、我的公司培训讲义(2):设计模式思想精要教程
3、【转】【Android】Gridview出现java.lang.OutOfMemoryError: bitmap size exceeds VM budget解决方法
4、九度OJ 1019:简单计算器 (基础题、DP)
5、[华为机试练习题]35.找零钱


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号