- 箭头函数表达式的语法比函数表达式短,并且不绑定自己的 this,arguments,super或 new.target。
- 此外,箭头函数最好在非方法函数中使用,且不能用作构造函数。
- 不能用作构造器,和 new 一起用就会抛出错误。所以也没有 new.target 值
- 箭头函数没有原型属性。由于不能使用 new 调用箭头函数,所以也没有构建原型的需求,于是箭头函数也不存在 prototype 这个属性。
- yield 关键字通常不能在箭头函数中使用(除非是嵌套在允许使用的函数内)。因此,箭头函数不能用作生成器。
- 箭头函数在参数和箭头之间不能换行哦
箭头函数的引入有两个方面的作用:一是更简短的函数书写,二是对 this的词法解析
基本语法
let func = value => value;
//相当于:
let func = function (value) {
return value;
};
//如果需要给函数传入多个参数:
let func = (value, num) => value * num;
//如果函数的代码块需要多条语句:
let func = (value, num) => {
return value * num
};
//要加{ }
//与变量解构结合:
let func = ({value, num}) => ({total: value * num})
// 使用
var result = func({
value: 10,
num: 10
})
console.log(result); // {total: 100}
this
箭头函数没有 this,所以需要通过查找作用域链来确定 this 的值。
这就意味着如果箭头函数被非箭头函数包含,this 绑定的就是最近一层非箭头函数的 this。
<script>
let a = function (x) {
this.x = x
console.log(this.x);// 1
let c = () => {
console.log(this.x); //1
console.log(this); //window
}
c()
}
a(1);
</script>
首先,箭头函数里没有x
,我用this.x
调用的是a
里面的。此时,a
里面又的this
是作用于全局的。所以在箭头函数里console.log(this)
打印出来window
。
- 箭头函数没有this,换句话来说,箭头函数在哪个作用域下,箭头函数的
this
就是调用的就是父作用域。(箭头函数本身有一个作用域)
网友评论