【JS高级】函数的进阶
函数的定义与调用
1.1函数的定义方式
- 函数声明方式function关键字(命名函数)
- function fn(){}
- 函数表达式(匿名函数)
- var fn=function(){}
- new Function()
- var fn=new Function('参数1','参数2','函数体')
Function里面参数必须是字符串格式
第三种方式执行效率低,也不方便书写,因此较少使用
所有桉树都是Function的实例(对象)
函数也属于对象
1.2函数对的调用方式
1.普通函数
2.对象的方法
3.构造函数
4.绑定事件函数
5.定时器函数
6.立即执行函数
1.3函数内部的this指向问题
https://www.bilibili.com/video/BV1DY41177dM?p=54&spm_id_from=pageDriver&vd_source=9be15c346432f1064d85ec92b746747f
2.1改变函数内部this指向
JavaScript为我们专门提供了一些函数方法来帮我们更优雅的处理函数内部this的指向问题,常用的有 bind() .call(). apply()三种方法。
1.call方法
1.call第一个可以调用函数第二个可以改变函数内的this指向
2.call的主要作用可以实现继承
2.apply方法
1.也是调用函数第二个可以改变函数内部的this指向
2.但是他的参数必须是数组(伪数组)
3.apply 的主要应用比如说我们可以利用apply借助于数学内置对象
求最大值Math.max();
3.bind方法
1.不会调用原来的函数可以改变原来函数内部的this指向
2.返回的是原函数改变this之后产生的新函数
3.如果有的函数我们不需要立即调用但是又想改变这个函数内部的this指向此时用bind
应用
我们有一个按钮,当我们点击了之后,就禁用这个按钮,3秒钟之后开启这个按钮
2.2 call(),apply(),bind()总结
相同点
都可以改变函数内部this指向问题
区别点
- call和apply 会调用函数,并且改变函数内部this指向.
- call和apply传递的参数不一样, call传递参数aru1, aru2..形式apply必须数组形式[arg]
- bind 不会调用函数,可以改变函数内部this指向.
主要应用场景
- call经常做继承.
- apply经常跟数组有关系.比如借助于数学对象实现数组最大值最小值
- bind不调用函数但是还想改变this指向.比如改变定时器内部的this指向.