函数类型
函数是对象,函数名实际上为一个指向函数对象的指针,不会与某个函数绑定。
函数的定义
- 使用函数声明语法定义
- 使用函数表达式定义【不推荐】
- 使用Function构造函数
注意:使用不带圆括号的函数名是访问函数指针,而并非是调用函数。
函数声明和函数表达式的区别:
- 解析器会先读取函数声明,并使其在执行任何代码前可用
- 函数表达式是当解析器执行到它所在的代码行,才会被解释执行
函数的内部属性
- arguments: 类数组对象,包好所有传入函数中的参数
- this: 引用函数执行的环境对象
- length: 函数接收的命名参数的个数
- prototype: 保存所有的实例方法所在 【后一篇会详细介绍】
prototype是不可枚举的,所以使用for-in是无法发现的。
函数的方法:
- apply/call:非继承而来的方法,在特定的作用域中调用函数,实际上等于设置函数体内this对象的值
- apply()方法接收两个参数:1)在其中运行的函数作用域 2)Array的实例或者arguments对象
注意:在严格模式下,未指定环境对象而调用函数,则 this不会转型为window,而为undefined. - call()接收参数:1)在其中运行的函数作用域 2)参数直接传递给函数
- bind(): 创建一个函数的实例,其this值会被绑定到传给bind()函数的值。