文章目录
1.函数的定义
1-1.自定义函数
function fn(){}
1-2.函数表达式(匿名函数)
var fn = function(){}
1-3.利用new Function(‘参数1’,‘参数2’,‘表达式’)
var fn = new Function('参数1','参数2','表达式')
2.函数的调用
2-1.普通函数的调用
fn()
fn.call()
2-2.对象的方法的调用
obj.fn()
2-3.构造函数的调用
new Fn
2-4.绑定事件函数的调用
点击按钮的时候
2-5.定时器函数的调用
setInterval(function(){},1000)
//隔一秒调用一次
2-6.立即执行函数的调用
(function(){
console.log('立即就调用了')
})
3.this
3-1.六种函数的this指向
3-2.改变函数内部的this指向
3-2-1.call()方法
- 主要可以用来调用函数和改变函数内部this指向
- 主要作用是可以用来继承
var obj = {
name:'lq'
}
function fn(){
console.log(this);
}
fn.call()
fn.call(obj)
3-2-2.apply()方法
- 第一个参数是this指向的对象,第二个参数必须是一个数组或者伪数组
var obj = {
name:'lq'
}
function fn(data){
console.log(this,data);
}
fn.apply()
// fn.apply(obj , '必须是一个数组')
fn.apply(obj,['lq'])
3-2-3.bind()方法
- bind()方法不可以调用函数,只能用来改变this指向
- 从第二个参数开始可以传递多个参数
- 返回由只当的this值 和初始化参数改造的原函数拷贝
- 使用 bind后返回了一个拷贝的新函数,需要接受一下再调用
var obj = {
name:'lq'
}
function fn(a,b){
console.log(this);
console.log(a+b);
}
var f = fn.bind(obj,1,2)//改变了this指向但是不会调用函数
// 使用 bind后返回了一个拷贝的新函数,需要接受一下再调用
f()//调用一下
3-3.总结
相同点:
- 都可以改变函数的this指向
区别点:
- call和apply都会调用函数,并且改变函数内部的this指向
- call和apply传递的参数不一样,call传递参数是参数1参数2形式,apply必须是数组的形式
- bind不会调用函数,可以改变函数内部的this指向
主要应用场景:
- call经常用于继承
- apply经常跟数组有关系,可以借助数学对象求最大值最小值等
- bind不调用函数,但是项改变this指向,比如改变定时器内部的this指向
4.严格模式
- 在js文件中输入以下代码就开启了严格模式
use strict
- 严格模式下全局作用域中函数的this是undefined
5.高阶函数
- 就是一个函数的参数部分可以接收一个函数作为回调,参数部分的函数称作回调函数