1.创建箭头函数有两种方式:
第一种(熟练以后可以用第一种)
function aa(){
}
第二种
let aa=function(){
}
2.函数的调用:
//函数的普通调用
aa();
//函数的非常规调用 call(),apply(),bind()
var name='小王',age=12;
var obj={
name:'小张',
age:this.age,
info:function(){
console.info(this.name+'年龄'+this.age)
},
info2:function(from,to){
console.info(this.name+'年龄'+this.age+'来自'+form+'去往'+to)
}
}
var zhangsan={
name:'张三',
age:100
}
obj.info(); //小张年龄12
obj.info.call(zhangsan); //张三年龄100
obj.info.apply(zhangsan);//张三年龄100
obj.info.bind(zhangsan)(); //张三年龄100
3.箭头函数
var f=function(v){
return v;
}
//等同于 左边是参数,右边是返回值
var f = v => v;
var r=f(10);
console.info(r);
//写一个箭头函数
var f=()=>'hello'
console.info(f()); //hello
//写一个箭头函数,求两个数之和
var f1=(a,b)=>a+b
console.info(f1(10,33))//43
//写一个箭头函数,输出多个数的和
var f2=(...nums)=>{
let sum=0;
for (const n of nums) {
sum +=n;
}
console.info(sum);
}
f2(10,33,23) //66
示例如下:
function foo(){
setTimeout(() => {
console.info('id',this.id)//箭头函数没有自己的this
}, 100); //普通函数有自己的this
}
var id=21;
foo.call({id:42}); //42
function foo(){
console.info('foo:id'+this.id)
setTimeout(function() {
console.info('id',this.id)//箭头函数没有自己的this
}, 100); //普通函数有自己的this
}
var id=21;
foo.call({id:42}); //21
【总结】
箭头函数没有this指向,箭头函数内部this值只能通过查找作用域链来获取最终的指向,一旦使用箭头函数当前就不存在作用域
注意事项:
一、使用箭头函数,函数内部没有arguments
let getVal=(a,b)=>{
console.log(arguments);
reture a+b
}
console.log(getVal(1,3)) // arguments is not defined
二、箭头函数不能使用new 关键字来实例化对象
let person=()=>{
};
let p=new person(); //person is not a constructor
可以看出,function函数也是一个对象,但是箭头函数不是一个对象,他其实是一个语法糖