《js精粹》-读书笔记03

82 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情

第4章 函数

  • 函数用于指定对象的行为
  • 函数包含一组语句->js的基础模块单元,用于代码复用、信息隐藏和组合调用
  • 编程:将一组需求分解成一组函数与数据结构的技能

函数对象

  • js中函数是对象,可保存在变量、对象和数组中,可当参数传递给其他函数,函数可返回函数,不同的函数是可被调用
  • 对象是"名/值"对的集合,且有一个可连接到原型对象的隐藏连接
  • 对象字面量产生的对象 连接到 Object.prototype
  • 函数对象 连接到 Function.prototype (该原型对象连接到Object.prototype)
  • 函数创建时的隐藏属性:函数的上下文、实现函数行为的代码

函数字面量

  • 函数对象通过函数字面量来创建
    // 创建名为 add 的变量,并把两数字相加函数赋值给他
    var add = function(){
        return a + b;
    }
  • 函数字面量的4个部分:
    1.保留字 function
    2.函数名 (可省略)
    3.参数
    4.花括号内的执行语句

ps:函数字面量可以在任何允许表达式出现的地方,也可嵌套其他函数内

调用

  • 每个函数会接受附加参数: this 和 arguments
  • 参数 this 的值取决于调用模式
- 四种调用模式:

1.方法调用模式 - ( 函数被保存为对象的一个属性,称其为方法,方法被调用时,this 被绑定到该对象。)
2.函数调用模式 - ( 当作函数来调用,this 被绑定到全局对象)
3.构造器调用模式 - ( 函数用 new 调用,将会创建一个连接到函数 prototype 的新对象,this 被绑定到新对象上 )
4.apply调用模式 - ( 构建参数数组传递给调用函数,可选择 this 值 )

参数

  • 函数调用时,可通过 arguments 访问所有传递的参数列表
  • arguments 类数组对象,有length属性,但无数组方法

返回

  • return 语句
  • 函数返回值,如无指定返回值,则返回 undefined
  • 如函数调用带 new ,则返回 this

异常

  • throw 语句可中断函数执行
  • try catch 可捕获异常

扩充类型的功能

  • 通过给 object.prototype 添加方法,该方法对所有对象都可用
  • 通过给 Function.prototype 增加方法,使该方法对所有函数可用
    Function.prototype.method = function (name, func){
        this.prototype[name] = func;
        return this;
    }

递归

  • 递归函数:直接或间接的调用自身的函数

作用域

  • 全局作用域、函数作用域、块级作用域

闭包

  • 内部函数可访问外部函数的参数和变量

回调

模块

  • 可使用函数和闭包来构造模块
  • 模块:提供接口却隐藏状态和实现的函数或对象

级联

柯里化

记忆