es6箭头函数
箭头函数()=>{}
面试:箭头函数与普通函数区别?
- 语法区别
- this不同:普通函数this永远指向运行时调用this,谁调用指向谁, 但箭头函数没有自己this,指定父级有function的this,但如果父级没有function继续往上找
- 是否有arguments:普通函数是有arguments, 箭头函数没有
- 是否能实例化, 普通函数可以实例化,箭头函数不行
如何定义一个普通函数?
定义1:函数声明方式
特点:在定义前后位置都可以调用,因为函数声明有函数提升的作用
console.log('函数声明前',sum(20,66))
function 函数名(参数1,参数2,参数3){}
function sum(a,b){
return a + b
}
console.log('函数声明后',sum(20,66))
定义2:函数表达式
特点:函数表达式只能先定义后调用
let 变量名 = function(参数1,参数2,参数3){};
let sum=function result(a,b){ //result可以加,不能调用
return a + b
}
console.log('函数表达式',sum(88,66))
如何定义箭头函数?
箭头函数this指向
(参数1,参数2,参数3)=>{}
var obj = {
username:"1906A",
sum:function(){
console.log("箭头函数this:",this) //用箭头函数this指向window, 不是箭头函数就是指向当前对象obj,找父级
return a + b;
}
}
obj.sum()
console.log('箭头函数结果',obj.sum())
或者:
var sum=(a, b)=>{
console.log("this",this) //现在没有区别
return a + b;
}
var result = sum(10,20) //箭头函数不能实例化
console.log('箭头函数结果',result)
普通函数this指向
function sum(a, b) {
console.log("this",this) //如果没有创建不实例化 var result = sum(10,20) this指向window, 如果创建实例化 var result = sum(10,20)this指向当前sum
this.total = a + b;
//return a + b;
}
var result = sum(10,20)
console.log('函数声明后',result)