# 章序号/节序号/节/笔记序号
codecademy, Iterators,High-Order Function
# 概念阐释
高阶函数是指接受其他函数作为**参数**或**返回函数作为输出**的函数。比如,“我们举办了一个生日聚会”是一个可以建立在“我们做了个蛋糕。”之上的函数。
```js
const announceThatIAmDoingImportantWork = () => {
console.log("I’m doing very important work!");
};
const busy = announceThatIAmDoingImportantWork;
busy();
console.log(busy.name);//print announceThatIAmDoingImportantWork
```
- 注意:我们想要**分配函数本身的值,而不是它在调用时返回的值。** 所以是`announceThatIAmDoingImportantWork`不是`announceThatIAmDoingImportantWork();`
- `busy`变量相当于赋予为函数了,所以它的变量名可以调用 **`busy();`** ,也可以使用函数的[属性和方法](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function);
# 举例子
# 类比、比较与对比
# 问题
1. 函数作为数据类型, 用`isTwoPlusTwo`变量名重新赋值;调用变量;并用函数属性`.name` print函数名称。
```js
const checkThatTwoPlusTwoEqualsFourAMillionTimes = () => {
for(let i = 1; i <= 1000000; i++) {
if ( (2 + 2) != 4) {
console.log('Something has gone very wrong :( ');
}
}
};
```
# 问题答案
```js
let isTwoPlusTwo = checkThatTwoPlusTwoEqualsFourAMillionTimes;
isTwoPlusTwo();
console.log(isTwoPlusTwo.name);
```
# 备注(经验集/错误集)
## 经验集
## 错误集
- 新变量相当于被函数附体了,成为了新宿主
## 参考资料