基础
没有this、super、arguments 和 new.target 绑定
不能通过 new 关键字调用
没有 prototype
不可以绑定this 的绑定
不支持argument
不支持重复命名参数
疑问
// 第一种 用 var 定义 value
var value = '小明'
const foo = {
value: '小红',
getValue: () => console.log(this.value)
}
foo.getValue() // => 输出的是小明
// 第二种 用 const 定义 value
const value = '小明'
const foo = {
value: '小红',
getValue: () => console.log(this.value)
}
foo.getValue() // => undefind
上面两个示例,第一个输出 小明 第二个输出undefined ,都是直接请求的全局的属性,因为const不会自动挂到 window 属性上,因此会输出 undefined。
原因
箭头函数是由声明的时候决定的。
箭头函数 this 的指向(不仅仅是this,其实super, new.target 等)由 外围最近一层非箭头函数决定。
在对象声明的时候, value 和 getvalue() 都是 foo的内部属性(方法),则他们的外围自然是全局了。
关键的点在于getvalue:()=>{} 和 getvalue:function(){} 和 getvalue(){} 这三种形式对于方法的声明,应该怎么看待。
后面两个声明方式在功能上是等价的,第三种是es6 新增的简写方式。而第一个箭头函数和两者的却比在于箭头函数本身以及this指向等。
三者在声明的过程中,任然和value 属性一样,是属于foo 内部的,与foo 等价的。
因此在使用箭头函数声明getvalue 方法的时候,this 是由foo 外围决定的,而foo 的外围就是 window ,所以getvalue 的this 指向是window .