箭头函数中 this 的行为与常规函数的 this 行为有很大不同。
无论如何执行或在何处执行,箭头函数内部的 this 值始终等于外部函数的 this 值。
换句话说,箭头函数可按词法解析 this,箭头函数没有定义自己的执行上下文。
(1). 格式:参数 => 表达式/语句
let a = b => b *2;
let a = b => {
return b * 3; // 加了大括号,就需要return,否则值不会返回
}
(2). 继承外层作用域,没有独立作用域.
var obj = {
aFn: function() {
console.log(this); // this指向的是它的调用者(obj.aFn()),即obj对象
},
bFn: () => {
console.log(this); // 这个函数是没有作用域的,与obj是共享一个作用域的,所以指向obj所在的作用域window
}
}
obj.aFn(); // {aFn: ƒ, bFn: ƒ},输出obj本身
obj.bFn(); // Window {parent: Window, opener: null, top: Window, length: 11, frames: Window, …},输出window作用域
(3). 不能用作构造函数.
let Test = function() {}
let test = new Test();
console.log(test) // Animal {}
let Test = () => {}
let test = new Test(); // Uncaught TypeError: Animal is not a constructor
(4). 没有prototype属性.
let aFn = function(){};
let b = () => {};
console.log(aFn.prototype); // {constructor: ƒ},指向了构建函数
console.log(b.prototype); // undefined
标签:aFn,obj,函数,作用域,js,箭头,let,console
From: https://blog.51cto.com/u_16255561/7434740