ES6——箭头函数以及this指向

以前JavaScript写法: 
function sum(num1, num2) {
			return num1 + num2;
		}

ES6箭头函数的写法:

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

更简化的写法 

const sum = (num1, num2) => num1 + num2;

function(){}

等同于 : 

()=>{} 

x => x * x
//相当于
function (x) {
    return x * x;
}

 

再看个同样的例子:

let func1 = function(){
			console.log('普通无参匿名函数');
		}
		func1();
		let func2 = ()=>{
			console.log('箭头函数');
		}
		func2();
    

如果是一条语句的话可以省略

let func3= ()=>console.log('我是另一个箭头函数');        
func3();

如果是有参数的话:

/* let func3 = (a)=>console.log(a);
// 一个参数可以省略()最好写上
	func3('333');
let func4 = (a,b)=>console.log(a,b);
// 一个参数可以省略()最好写上
	unc4('444','213');
// let func5 = (a,b) => a+b;
// console.log(func5(1,5));
let func5 = (a,b) => {
	return a+b;
}
	console.log(func5(1,5));

箭头函数中的this:

重要特性:箭头函数没有this,所以this是定义的时候,外部所在的对象是他的this。调用的时候的this也没有arguments值;

当在函数中使用一个变量的时候,首先在本函数内部查找这个变量,如果找不到那就去找他的父级函数,依次往上推,最后到window对象,全局变量默认挂载是在window对象下的

console.log(this);        
let obj = {
x: 100, //属性x
  show() {
   console.log(this);
//延迟500毫秒,输出x的值
   setTimeout(function () {
console.log(this.x);//因为这里的setTimeout的this指向的是window对象,而在window中并没有找到x,所以返回undefined
      }, 500)
    }
};
obj.show();     //undefined

 如果是使用箭头函数的话就会改变this的指向

console.log(this);
var obj = {
    x: 100, //属性x
        show() {
            //延迟500毫秒,输出x的值
            setTimeout(() => {
                console.log(this);
                console.log(this.x);
            }, 500);
        },
    };
    obj.show(); //打印结果:100

 

当定义obj的show( )方法的时候,我们在箭头函数编写this.x,此时的this是指的obj,所以this.x指的是obj.x。而在show()被调用的时候,this依然指向的是被定义时候所指向的对象,也就是obj对象,故打印出:100。

 证明了一个观点:

箭头函数中的this指向的是定义时的this,而不是执行时的this

  • 箭头函数中不绑定this,箭头函数中的this指向是它所定义的位置,可以简单理解成,定义箭头函数中的作用域的this指向谁,它就指向谁

  • 箭头函数的优点在于解决了this执行环境所造成的一些问题。比如:解决了匿名函数this指向的问题(匿名函数的执行环境具有全局性),包括setTimeout和setInterval中使用this所造成的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Southern Wind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值