Js箭头函数适用场景及需要注意的地方

箭头函数的注意事项

(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
(4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
上面四点中,第一点尤其值得注意。this对象的指向是可变的,但是在箭头函数中,它是固定的。

 

箭头函数适用场景

(1)箭头函数适合于无复杂逻辑或者无副作用的纯函数场景下,例如:用在 map、reduce、filter 的回调函数定义中

(2)箭头函数的亮点是简洁,但在有多层函数嵌套的情况下,箭头函数反而影响了函数的作用范围的识别度,这种情况不建议使用箭头函数

(3)箭头函数要实现类似纯函数的效果,必须剔除外部状态。所以箭头函数不具备普通函数里常见的 this、arguments 等,当然也就不能用 call()、apply()、bind() 去改变 this 的指向

http://www.xihuanfan.com 手机游戏下载

(4)箭头函数不适合定义对象的方法(对象字面量方法、对象原型方法、构造器方法),因为箭头函数没有自己的 this,其内部的 this 指向的是外层作用域的 this

const json = {
    bar: 1,
    fn: () => console.log(this.bar)
};

json.fn();  //-> undefined
// this 并不是指向 json 这个对象,而是再往上到达全局作用域
function Foo() {
    this.bar = 1;
}
Foo.prototype.fn = () => console.log(this.foo);

const foo = new Foo();
foo.fn();  //-> undefined
// this 并不是指向 Foo,根据变量查找规则,回溯到了全局作用域
const Message = (text) => {  
    this.text = text;
};
var helloMessage = new Message('Hello World!');  
console.log(helloMessage.text); //-> Message is not a constructor
// 不可以当作构造函数,也就是说,不可以使用 new 命令

 

 

(5)箭头函数不适合定义结合动态上下文的回调函数(事件绑定函数),因为箭头函数在声明的时候会绑定静态上下文

const button = document.querySelector('button');
button.addEventListener('click', () => {  
    this.textContent = 'Loading...';
});
// this 并不是指向预期的 button 元素,而是 window
posted @ 2021-07-07 18:49  陌路y  阅读(719)  评论(0编辑  收藏  举报