Skip to content

Latest commit

 

History

History
58 lines (44 loc) · 2.69 KB

File metadata and controls

58 lines (44 loc) · 2.69 KB

面向对象

什么是面向对象编程

  • 用对象的思想去写代码,就是面向对象编程
    • 过程式写法
    • 面向对象写法
  • 我们一直都在使用对象
    • 数组 Array 时间 Date

面向对象编程(OOP)的特点

  • 抽象:抓住核心问题
  • 封装:只能通过对象来访问其方法
  • 继承:从已有对象上继承出新的对象
  • 多态:多对象的不同形态

对象的组成

  • 方法(行为、操作)——函数:过程、动态的
  • 属性——变量:状态、静态的

闭包理解

仔细阅读博文 阮一峰

闭包(closure)是 Javascript 语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 在上面的代码中,函数 f2 就被包括在函数 f1 内部, 这时 f1 内部的所有局部变量,对 f2 都是可见的。 但是反过来就不行,f2 内部的局部变量,对 f1 就是不可见的。 这就是Javascript 语言特有的"链式作用域"结构(chain scope), 子对象会一级一级地向上寻找所有父对象的变量。 所以,父对象的所有变量,对子对象都是可见的,反之则不成立。 在 Javascript 语言中,只有函数内部的子函数才能读取局部变量, 因此可以把闭包简单理解成**"定义在一个函数内部的函数"**。

最大用处有两个, 一个是前面提到的可以读取函数内部的变量另一个就是让这些变量的值始终保持在内存中

为什么会这样呢? 原因就在于 f1 是 f2 的父函数,而 f2 被赋给了一个全局变量,这导致 f2 始终在内存中,而 f2 的存在依赖于 f1,因此 f1 也始终在内存中, 不会在调用结束后,被垃圾回收机制(garbage collection)回收

使用闭包的注意点 1)由于闭包会使得函数中的变量都被保存在内存中, 内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题, 在 IE 中可能导致内存泄露。 解决方法是,在退出函数之前,将不使用的局部变量全部删除。 2)闭包会在父函数外部,改变父函数内部变量的值。 所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value), 这时一定要小心,不要随便改变父函数内部变量的值。

关于本博文最后的思考题 答案 > 归根结底来源于书籍上的知识点

  1. http://www.cnblogs.com/GongQi/