箭头函数
普通函数
命名函数
function fn1(){
}
//字面量形式
var fun2=function(){
}
//箭头函数
var fn3=()=>{
console.log(a,b)
}
fn3(10,11);
//一个参数
var fn4=a=>{
console.log(a);
}
//没有参数
//没有参数的时候,不能省略括号
var f5=()=>{
console.log(123);
}
//返回值
function aa(){
return 123;
}
let aa1=()=>123;//箭头函数
//箭头函数中如果只有一条 return 语句
// 则可以省略大括号
// 如果这个箭头函数还有且只有一个形参
// 则小括号也可以省略
let aa1 = a => a + 1
function b(){
return function b1(a){
return a+1;
}
}
let b=()=>a=>a+1;
let b1=b()(1);
console.log(b1);
btn.onclick=function(){
console.log(this);//标签
}
btn1.onclick=()=>{
console.log(this);//window
}
btn.onclick=function(){
setInterval(function(){
console.log(this);
},3000)
}
btn.onclick=function(){
setInterval(()=>{
console.log(this);
},3000)
}
btn.onclick = function () {
btn1.onclick = function () {
console.log(this);
}
}
- 当内部函数使用箭头函数时,不会改变外部函数的this指向
- 总结
- 普通函数谁调用我 我的this指向谁
- 箭头函数 我在谁里面被定义我的this就指向谁
let obj={
say:function(){
console.log(this);
},
eat:()=>{
console.log(this);
}
}
let {
say,
eat,
}=obj;
obj.say();
obj.eat();
给对象定义方法时不要使用箭头函数
function Dog(){
this.say=function(){
console.log(this);
}
this.eat=()=>{
console.log(this);
}
}
let d1=new Dog();
d1.say();
d1.eat();