本文从 5个方面来说明函数。

  1. 函数的定义,函数是 一组可复用的 代码。把常用的公共的代码 封装成函数,可以避免 来回的复制粘贴 ,既需要 搜索代码 又需要粘贴复制的,费时耗力 而且 会造成大量冗余的代码。写成函数,我们只需 调用该函数,传入必要的参数即可。方便高效。
  2. 函数的分类:
    1. 从用途方面 分为 普通函数和构造函数,一个作作普通调用,一个用来 结合 new关键字 创建新的函数实例;
    2. 从 构建方式的不同 划分为 函数声明和函数表达式,区别如下:
      1. 函数声明 结合 function 关键字 + 函数名 + ()+{}。 会有 函数声明的提升。
      2. 函数表达式可以理解为:变量声明 、匿名函数声明 、 赋值表达式 的结合体。既有 变量的提升(初始undefined),也有 匿名函数声明的提升。
  3. 函数的属性:每个函数 都有一些 属性,这些属性 有时候会很有用
    1. length,返回函数的形参的个数。
    2. prototype,经由本函数构造的实例 会继承的方法的包含所在。
    3. 某些自定的属性。。
  4. 函数内部的属性,不经由函数+' . ' 调用的内部属性:
    1. arguments:类数组对象,包含传入的实参。arguments有个属性 callee 指向 包含arguments的当前函数。
    2. this。指向当前函数作为方法 归属的主体,如果该函数是作为某个对象的方法调用,那么该函数内部属性的this指向 该对象。        
  5. 函数的方法:
    1. call(obj,arg1,arg2):
      1. 改变函数内部的this指向obj。
      2. 分别传入实参 arg1,arg2.。。,跟函数的形参对应。  
    2. apply(obj,arguments):
      1. 改变函数内部的this指向obj。
      2. 分别传入实参类数组列表 arguments,跟函数的形参对应。
      bind(es5添加):类似于call()方法。
      1. 返回函数实例。
      2. bind(obj,arg1,arg2)
      3. 函数this指向 obj。
      4. 需要调用返回的函数实例,才会执行。       
  6. 易错点:
    1. js中的函数没有重载现象(允许多个同名函数,接受不同的参数的存在。),同一作用域下(execution context),只能存在一个同名的函数,或者是变量。如果同名现象存在,后面的会覆盖前面的。