# 1、函数也是值
JavaScript 语言将函数看作一种 值,与其它值(数值、字符串、布尔值等等)地位相同。凡是可以使用值的地方,就能使用函数。比如,可以把函数赋值给变量和对象的属性,也可以当作参数传入其他函数,或者作为函数的结果返回。函数只是一个可以执行的值,此外并无特殊之处。
由于函数与其他数据类型地位平等,所以在 JavaScript 语言中又称函数为 第一等公民。
![](https://img.kancloud.cn/d4/70/d470c2075c86f9c80afdd51fb728b846_635x440.png)
除此以外,还可以把函数当做返回值。
![](https://img.kancloud.cn/b7/99/b79904509076b14c667f4ab1e0d6e615_747x258.png)
也可以把函数当做另外一个函数的参数,如果一个函数当做另一个函数的参数了,那么把函数类型的参数叫做回调函数。
![](https://img.kancloud.cn/09/b6/09b61a39a0cc8c3be6944a2acbbdac6c_700x350.png)
# 2、函数也是对象
JS中处处皆对象,函数也不例外。
那么如何理解函数也是对象呢?这里主要要表达的是函数也可以使用对象那样的点语法。比如前面学习的Person.prototype;
比如在函数内部,可以使用“函数.length”来表示函数的形参个数,可以使用“函数.name”来获取当前的函数名。
![](https://img.kancloud.cn/00/54/0054b73eec71c33af11916a3995f3a88_640x163.png)
# 3、arguments对象
arguments对象,存在于函数的内部,它能够表达函数的实际参数(实参),除此以外,arguments对象还有一个属性callee,它表示函数的名字,arguments的length属性表示实参的个数。
![](https://img.kancloud.cn/f1/4b/f14b4e3781da6ebbd3947cf981e9f878_914x239.png)
小例子:计算函数参数的和:
![](https://img.kancloud.cn/73/4f/734ff576c953ae2e718ad7977e0dcb7f_724x244.png)
# 4、call、apply、bind函数
这三个函数都可以改变函数内部this的指向。
函数.call(需要指向的对象,参数1, 参数2…); 调用之后,会直接执行函数
函数.apply(需要指向的对象,[参数1, 参数2…]); 调用之后,会直接执行函数
函数.bind(需要指向的对象,参数1, 参数2…); 调用之后,不会执行函数。
call方法演示:
![](https://img.kancloud.cn/6c/36/6c3642dd96bba2d4f089fb42c054d09b_907x336.png)
apply方法演示:
![](https://img.kancloud.cn/5f/5f/5f5fa6824cfaf5506dad2f744b8b3da9_885x358.png)
bind函数演示:
![](https://img.kancloud.cn/ba/49/ba49c938eb412f7740cf8ebb56b791ef_941x431.png)
小例子,查找数组中的最大值:
![](https://img.kancloud.cn/e7/fc/e7fcaf7b753bdd5be3976dd6d54ad8fc_717x505.png)
- 第一天
- 一、学习目标
- 二、关于JavaScript
- 三、JS语法基础
- 四、变量
- 五、常量
- 六、运算符
- 七、数组
- 八、对象
- 九、数据类型
- 第二天
- 一、昨日复习
- 二、今日目标
- 三、数据类型转换
- 四、流程控制
- 五、函数基础
- 六、作用域
- 七、标准库(内置对象)
- 八、总结
- 第三天
- 一、昨日复习
- 二、今日目标
- 三、DOM介绍
- 四、元素(标签)节点查询操作
- 五、元素(标签)节点增删改操作
- 六、设置/获取元素的css样式
- 七、事件和事件对象
- 八、键盘keyCode对照表
- 第四天
- 一、昨日复习
- 二、今日目标
- 三、DOM之属性节点操作
- 四、DOM对象的通用属性
- 五、DOM获取元素的位置
- 六、事件绑定与移除
- 七、事件对象相关属性和方法使用
- 八、案例--可编辑的表格
- 第五天
- 一、今日目标
- 二、执行流程
- 三、定时器
- 四、闭包
- 五、案例
- 第六天
- 一、昨日回顾
- 二、今日目标
- 三、正则表达式概述
- 四、入门案例
- 五、正则语法
- 六、分组/捕获和反向引用
- 七、匹配中文(utf-8编码)
- 八、环视(断言/零宽断言/正向预测/负向预测)
- 九、正则对象的属性和方法
- 十、支持正则表达式的 String 对象的方法
- 十一、案例
- 十二、PHP中的正则表达式
- 第七天
- 一、昨日回顾
- 二、正则案例
- 三、PHP中的正则表达式
- 四、正则练习
- 五、仿淘宝评分小星星
- 六、标签页效果
- 七、横向下拉菜单
- 第八天
- 一、今日目标
- 二、面向对象编程
- 三、定义对象
- 四、对象相关操作
- 五、对象在内存中的存在形式
- 六、原型对象(关键)
- 七、定义对象进阶
- 八、函数进阶
- 第九天
- 一、昨日回顾
- 二、今日目标
- 三、Object
- 四、继承
- 五、this指向总结
- 六、案例(贪吃蛇)
- 第十天
- 一、今日目标
- 二、Ajax概述
- 三、工作原理
- 四、XMLHttpRequest对象介绍
- 五、使用Ajax的步骤
- 六、细节问题
- 七、JSON
- 八、Ajax中,服务器返回json格式的数据
- 九、案例--省市县三级联动
- 第十一天
- 一、昨日回顾
- 二、今日目标
- 三、完成省市县三级联动
- 四、优化省市县三级联动
- 五、服务器返回XML格式的数据
- 六、FormData对象
- 七、跨域请求
- 八、实现跨域请求
- 第十二天
- 一、Ajax回顾
- 二、今日目标
- 三、jQuery概述
- 四、快速入门
- 五、可编辑的表格
- 六、纵向导航菜单
- 七、横向导航菜单
- 八、标签页效果
- 第十三天
- 一、学习目标
- 二、杂项
- 三、jQuery中的事件
- 四、jQuery封装的Ajax
- 五、案例 -- 无刷新的分页
- 第十四天
- 一、昨日回顾
- 二、效果
- 三、跨域请求
- 四、文档操作
- 五、插件编写
- 六、自定义插件
- 七、第三方插件