Files
notes_estom/JavaScript/ecmascript-5/function-object.md
2022-04-18 20:40:34 +08:00

30 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 函数与 Function 对象
函数是这样的一段 JavaScript 代码,它只定义一次,但可能被执行或调用多次。
Function 类型是 JavaScript 提供的引用类型之一,通过 Function 类型创建 Function 对象。
在 JavaScript 中,函数也是以对象的形式存在的。每个函数都是一个 Function 对象。
函数名,本质就是一个变量名,是指向某个 Function 对象的引用。
## 构造函数
在 JavaScript 中,函数除了可以通过函数定义语句或字面量表达式两种方式定义之外,还可以通过 Function 类型进行定义:
```javascript
var add = new Function(
"num1",
"num2",
"var sum = num1+num2; return sum;"
);
```
> **值得注意的是:** 通过 Function 类型定义函数的效率远不如通过函数定义语句或字面量表达式两种方式定义。
目前,定义函数具有三种方式,这三种方式之间存在一定差别:
| 定义方式 | 执行 | 效率 |
| --- | --- | --- |
| 函数定义语句 | 函数名被声明提前 | 不存在效率问题 |
| 字面量表达式 | 函数体固定,无法动态执行 | 不存在效率问题 |
| Function 类型定义 | 函数体是字符串,可以动态执行 | 效率低 |
## 函数的属性和方法
由于每个函数都是一个 Function 对象Function 类型也提供了一些属性和方法:
| 属性名 | 描述 |
| --- | --- |
| length | 表示函数希望接收的命名参数的个数。|
| 方法名 | 描述 |
| --- | --- |
| call() | 在指定的函数内调用另一个函数,参数能够以列表形式传入。|
| apply() | 在指定的函数内调用另一个函数,参数能够以数组形式传入。|
| bind() | 用于基于现有函数创建一个新函数对象。同时为新函数对象提前绑定this值或设置参数值。|