私は最近、関数を定義するために元の構文の代わりにECMAScript 2016の矢印関数を使用し始めました。関数を定義するたびにこの構文を使用しただけでも、速度などの不利な点はありますか?注意すべき構文の他に、通常の関数と矢印関数の間に違いはありますか?
(function(){
alert('Is this');
})();
(()=>{
alert('somehow better than this?')
})();
私は最近、関数を定義するために元の構文の代わりにECMAScript 2016の矢印関数を使用し始めました。関数を定義するたびにこの構文を使用しただけでも、速度などの不利な点はありますか?注意すべき構文の他に、通常の関数と矢印関数の間に違いはありますか?
(function(){
alert('Is this');
})();
(()=>{
alert('somehow better than this?')
})();
ことの一つは、矢印機能がarguments
オブジェクトの使用を持っていないことです。
let test =() => {
// expect an error
console.log(arguments);
}
test(1,2,3);
new
を使用することはできません字句バインドthis
let Person = (name) => {
this.name = name;
}
// expect an error
let person = new Person('Bob');
多くの違いがありますが、矢印機能のdocumentationの一部を確認します。
矢印機能は常に匿名で、lexical thisです。パフォーマンスの差はごくわずかですが、this
は予期せぬものを参照している可能性があります(まったく期待していたものを参照し、バインドする必要はありません)。
私はまた、firefoxが矢印機能で2-3倍多くの時間を使用していることに気づきましたが、私はただちにperfテストを行いました。 – bjanes