开启掘金成长之旅!这是我参与「掘金日新计划 · 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;
}
递归
- 递归函数:直接或间接的调用自身的函数
作用域
- 全局作用域、函数作用域、块级作用域
闭包
- 内部函数可访问外部函数的参数和变量
回调
模块
- 可使用函数和闭包来构造模块
- 模块:提供接口却隐藏状态和实现的函数或对象