一、声明定义
1.函数也是对象,函数是Function类创建的实例
1 | let func = new Function('title', 'console.log(title)'); |
2.使用函数声明来定义函数
1 | function func(title) { |
3.对象字面量属性函数简写
1 | let user = { |
二、全局函数
全局函数会声明在window对象中,可能会覆盖window内置方法
1 | // 全局函数 |
三、匿名函数与函数提升
1.具名函数与匿名函数的区别
1 | // 具名函数可以函数提升 |
2.案例分析
1 | func(); |
1 | func(); |
四、立即执行函数
1.简单的立即执行函数
1 | (function() { |
2.可以用来定义私有作用域防止污染全局作用域
1 | (function () { |
1 | (function () { |
1 | (function (window) { |
五、函数默认参数
1 | // 默认升序 |
六、函数参数与arguments
1 | function sum() { |
七、递归
1.实现阶乘
1 | // 递归实现阶乘计算,关键是退出递归的条件 |
2.求和
1 | function sum(...args) { |
3.实现倒三角
1 | function star(sum) { |
八、回调函数
在某个时刻被其他函数调用的函数被称为回调函数。
九、this
this表示当前执行上下文,指向当前函数的运行环境
1.this指向
1 | // 对象中的函数称为(类)方法,方法中的this指的是当前对象的引用 |
2.通过常量改变this指向
在父作用域中定义引用this的变量
1 | // 通过常量改变this指向 |
3.箭头函数改变this指向
箭头函数没有this,即箭头函数的this指向父级作用域的this
1 | let lesson = { |
1 | let domObj = { |
1 | let domObj = { |
十、call/apply/bind 改变this指针
1.构造函数
函数被new时即为构造函数,一般构造函数中包含属性和方法。构造函数的this默认是一个空对象,然后构造函数处理后把这个空对象变得有值。
call/apply/bind 可以改变构造函数中的空对象,即让构造函数this指向另一个对象。
2.call
1 | // 构造函数User |
3.apply
call与apply两个方法作用一样,都是将对象绑定到this,只是传递参数的方式不同。
(1)apply用数组传参;(2)call需要分别传参;(3)与bind不同,call/apply会立即执行。
1 | <body> |
多个构造函数服用方法
1 | /* 多个构造函数复用方法 */ |
4.bind
bind不会立刻执行,而是得到一个新的函数
1 | // bind 不会立刻执行,而是得到一个新的函数 |
5.案例
网页随机色效果
1 | function Color(elem) { |