第六章

函数表达式

  1. 两种创建函数的方式
    1. 函数声明:function关键字+函数名字。有一个特征是会函数声明提升。即在执行代码之前会先读取函数声明。就是说可以把函数声明放在调用它的语句后面。
    2. 函数表达式:创建一个函数并将其赋值给一个变量,也叫匿名函数。
  2. 递归:递归函数是在一个函数通过名字调用自身的情况下构成的。即在函数内部调用自身。
  3. 闭包:有权访问另一个函数作用域中的变量的函数。但只能取得包含函数中任何变量的最后一个值。
  4. this对象:this对象是在运行时基于函数的执行环境绑定它的。在全局函数时,this指向window;当函数被作为某个对象的方法调用时,this指向这个对象。匿名函数的执行具有全局性,所以大多数this对象指向window。
  5. 匿名函数中定义的任何变量,都会在执行完后被销毁。
  6. 内存泄露:
    • 如果闭包的作用域链中保存着一个HTML元素,那么就意味着该元素无法被销毁。
    • 闭包会引用包含函数的整个活动对象,而其中包含着element。即使闭包不会直接引用element,包含函数的活动对象中也会任然保存一个引用。因此有必要把element变量设置为null。这样能解除对DOM对象的引用,减少其引用数,能确保正常释放内存。
  7. 模仿块级作用域:定义并立即调用一个匿名函数。在该匿名函数中定义所需的变量和函数。在外部是无法获取匿名函数内部的变量和函数。
  8. 私有变量:即在函数内部创建的变量和函数。
    • 在外部无法访问到内部创建的变量和函数。
    • 把有权访问私有变量和私有函数的方法称为特权方法。有两种:
      1. 在构造函数中定义:使用this.+名字=function(){私有变量和私有函数的调用}。缺点:会在每一个实例对象中都创建同样一组新方法。
      2. 在私有作用域中定义:即在匿名函数内创建私有变量和私有方法,然后在创建一个全局构造函数,在全局构造函数的原型对象上添加方法,该方法可以访问和修改私有变量和私有函数。优点:每个实例都没有自己的私有变量和私有方法,全都保存在原型中,可以进行代码复用。
  9. 模块模式:
    • 即为只有一个实例的对象创建私有变量、私有函数和特权方法。
    • 用函数表达式的方式定义一个匿名函数,并在匿名函数内定义私有变量和私有方法,然后返回一个字面量对象,该对象中有特权方法。
    • 这个字面量对象定义的是单例的公共接口。这个模式在需要对单例进行某些初始化,同时又需要维护其私有变量时非常有用。
  10. 增强的模块模式:同模式9,只是需要定义一个指定类型的对象,在该对象中定义特权方法,然后将其返回出去。

你可能感兴趣的:(第六章)