箭头函数

//箭头函数
//格式()=>{}
1.最简单的形式:
1  const fn =()=>{
2     console.log('胡66!')
3    }
4    fn();

上面输出:胡66.

2.带参数的箭头函数

1 const sum = (num1,num2) => {
2     return num1+num2;
3    }

3.如果函数只有一句代码,箭头函数大括号可以省略

 const sum1 = (n1,n2)=> n1+n2;//箭头后面的表示return的值

4.在箭头函数中,如果形参只有1个,可以省略小括号

const sum2 = n=> n;//表示返回一个参数n

5.箭头函数的this

(1)箭头函数不绑定this,箭头函数的this指向,取决于函数定义的位置,谁调用了它,this就指向谁。
1 const sum = (num1,num2) => {
2     console.log('sum的this:'+this)
3     return num1+num2;
4    }
sum();//由于这里调用sum的对象是window,所以这里打印的this指向的是window

 (2)用bind改变了this的指向,所以箭头函数的this指向也会改变

 1  const obj={name:'胡88'}
 2    function fnn(){
 3        console.log(this);
 4         return ()=>{
 5         console.log("箭头函数的this")
 6         console.log(this)
 7         console.log("箭头函数的this")
 8         }
 9    }
10    const the = fnn.bind(obj);//bind改变fnn的this指向
11    the();//虽然这里还是window调用了fnn函数,但是上面的bind已经改变了函数的调用对象,实际调用fnn的是obj这个对象,所以这里的this指的是obj
12    o = fnn();//将fnn赋给变量o
13    o();//指向函数o,这里的this指向的还是window    

上面的(1)的箭头函数定义在全局中,它的this对象指向的是window,(2)中的箭头函数定义在函数中,它的this指向与它的父函数一样,谁调用

它的父函数,箭头函数的this就指向谁。

不管怎么说,上述的箭头函数都是定义在可以定义作用域的域中。

7.要是箭头函数定义在对象中呢,因为对象没有作用域,那么this指向的是谁呢?

1 var obj1 = {
2        age:20,
3        say:()=>{
4            alert(this.age)
alert(this)//这里的this指的是调用对象
5 } 6 }
obj1.say()//这里弹出的this.age会是20吗???

上述obj1.say()弹出的this.age会是undefined,因为调用者window中没有age.

修改形式(1)

可以将上面改为下面形式,在全局中定义变量age=100:

1   var age = 100
2    var obj1 = {
3        age:20,
4        say:()=>{
5            alert(this.age)
6        }
7    }
8   obj1.say();

上述obj1.say()弹出的this.age会是100,因为调用者window的作用域是全局,全局下的age=100.

穷则独善其身,达则兼济天下……
原文地址:https://www.cnblogs.com/hmy-666/p/12607776.html