一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情
函数的定义
函数的定义方式
1.函数声明方式function关键字(命名函数)
function fn() {}
2.函数表达式(匿名函数)
var fun =function() {}
3.new Function('参数1','参数2',…,'函数体')
var f= new Function('a','b','console.log(a+b)');
f(1,2);
Function里面参数都必须是字符串格式
第三种方式执行效率低,也不方便书写,因此比较少使用
所有函数都是Function的实例(对象)
函数也属于对象
函数的调用方式
1.普通函数
function fu(){
console.log("a")
}
fn(); fn.call();
2.对象的方法
var o={
sayHi:function(){
console.log("a")
}
}
o.sayHi();
3.构造函数
function Star(){}
new Star();
4.绑定事件函数
btn.onclick=function() {}
5.定时器函数
setInterval(function() {},1000)
6.立即执行函数
(function(){
console.log("a");
})
this
函数的不同调用决定了this的指向不同
1.普通函数this指向window
2.对象的方法this指向的是对象o
3.构造函数this指向ldh这个实例对象 原型对象里面的this指向的也是ldh这个实例对象
4.绑定事件函数this指向的是函数的调用者btn这个按钮对象
5.定时函数this指向的也是window
6.立即执行函数指向的也是window
改变函数内部this指向:call() apply() bind()
call 方法
call()方法调用一个对象。简单理解为调用函数的方法,但是他可以改变函数的this指向
fn.call(thisArg,arg1,arg2…)
call的第一个可以调用函数 第二个可以改变函数内部this指向、
call的主要作用可以实现继承
apply方法
apply()方法调用一个函数。简单理解为调用函数的方式,但是他可以改变函数的this指向
fn.apply(thisArg,[argsArray])
thisArg:在fn函数运行时指定的this值
argsArray:传递的值,必须包含在数组里面
返回值就是函数的返回值,因为它就是调用函数
apply的第一个可以调用函数,第二个可以改变函数内部this指向
apply的主要应用:比如说我们可以利用apply借助于数学内置对象求最大值
var arr=[1,66,3,9];
var max=Math.max.apply(null,arr);
console.log(max)
band方法
band()方法不会调用函数,但是能改变函数内部this指向
fn.bind(thisArg,arg1,arg2,…)
thisArg:在fn函数运行时指向的this值
arg1,arg2:传递的其他参数
返回由指定的this值和初始化参数改造的原函数拷贝
返回的是原函数改变this之后产生的新函数
应用场景:比如改变定时器内部的this指向