ES6中新增的定义函数的方式 (箭头函数是用来简化函数定义语法的)
() => { }
const fn = () => { }
1、在箭头函数中,函数体中只有一句代码,且代码的执行结果就是返回值,可以省略大括号
const sum = (num1,num2) => num1+num2;
const result = sum(10,20);
console.log(result);
2、如果形参只有一个,可以省略小括号
function fn(v){
return v;
}
//简化后的写法
const fn = v => v;
3、箭头函数不能绑定this关键字,箭头函数中的this,指向的是函数定义位置的上下文this
const obj = {name:"张三"}
function fn(){
console.log(this);
//箭头函数没有自己的this,所以箭头函数的this是指向fn()的this,
//而fn()中的this通过call绑定到了obj对象上
return () => {
console.log(this);
}
}
//将fn中的this指向obj对象,定义resFn来接收匿名函数返回的结果,此时这个匿名函数也是个箭头函数
const resFn = fn.call(obj);
//输出this,此时的this指向的也是obj对象
resFn();
一道面试题:以下代码弹出的结果是什么?
const obj = {
age:18,
say:() => {
alert(this.age)
}
}
obj.say();
答案是undefined,这是因为对象是不能产生作用域的!这个say()箭头函数是被定义在了全局的作用域上,所以say()里面的this指向的是window,而age属性在全局作用域上没有定义,所以弹出的是undefined