普通函数,普通函数需要声明才能触发,存在声明提升,也叫函数声明式,this指向window
f1() //声明提升
function f1(){
console.log('普通函数');
}
f1() //函数声明
匿名函数,也叫函数表达式。匿名函数就是没有名字的函数,需要用括号括起来才能使用,匿名函数不存在声明提升,this指向window
(function (){
console.log('匿名函数');
})()
也可以使用运算符来代替括号,加括号和运算符就想当于将匿名函数变成了函数表达式,函数表达式也是匿名函数、立即执行函数的一种
+function (){
console.log('匿名');
}()
函数表达式,也叫匿名函数
var a=function f1(){
alert('表达式');
}
a()
立即执行函数,也叫自调用函数。匿名函数使用立即执行函数需要用括号包裹起来,或者在前面加运算符,使用函数表达式就可以直接在尾部加括号立即调用
(function f1(){
console.log('立即执行1')
}())
+function(){
console.log('立即执行2')
}()
var aa=function (){
console.log('立即执行3');
}()
回调函数。将一个函数作为参数传递给另一个函数,就是回调函数
function f1(a,b){
console.log(a);
console.log(b);
}
function f2(){
console.log('回调');
}
f1(1,f2)
构造函数 ,需要使用new来创建实例化对象,没有实例化对象就是普通函数,构造函数的this指向实例化对象
function f1(){
this.name='张三'
}
//原形上的方法
f1.prototype={
a:function(){
console.log('我是a');
},
b:function(){
console.log('我是b');
}
}
//实例化对象
var obj = new f1()
console.log(obj);
console.log(obj.name);
//原形上的方法需要调用才能执行
obj.a()
obj.b()
箭头函数,箭头函数没有arguments,this指向为父级上下文的this指向
var f1=((a,b)=>{
return a+b
})
只有一个参数的时候可以省略括号,没有参数或者有很多参数的时候就要加括号
var f1=(a=>{
return a
})
函数体只有一行的时候可以省略大括号{}
var f1 = (a,b) => a + b //相当于return a+b