2017-10-26 11 views
0

に出たプロジェクト内のこの行は私に構文エラー"のforEachを(エル=> {})" と "forEachの(機能(){})" はJavaScript

document.querySelectorAll('[name="callqualitycheck"]').forEach(e=> { 
    if(e.checked){comment = comment + "," + e.value;} 
}); 

を与えているときにI forEach(e=> {forEach(function(e) {に変更してください。そのうまく動作します。 しかし、私は違いが何であるか分からず、将来的には何の問題も生じません。 誰もこれを説明できますか?

+2

=>はES2015の機能です。これは矢印の機能です。 function()と同じことをしますが、この値は内部のメソッドに渡され、この値を関数にバインドする必要はありません。詳細はこちら - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions – Jackthomson

+2

矢印関数の構文 '=>'は新しいものです。あなたはどこを走ろうとしていますか?ブラウザでは?ブラウザは新しい構文を理解していますか?この記事のブラウザのセクションを見てくださいhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions – mortb

答えて

-1

ラムダ関数で大括弧{}は必要ありません。 たとえば、3項演算子で実行できます。

document.querySelectorAll('[name="callqualitycheck"]').forEach(e=> 
    comment += e.checked?','+e.value:''); 
+0

そのケースではありません – DanilGholtsman

+0

はい、そうです。次のコードではなく、質問にもっと焦点を当てる必要があります;-) – zruF

2

forEach(e => { code })forEach(function(e){ other code })同じタスクを実行することができ、しかし、彼らは、それ自体は同じではありません。

最初に、の矢印機能がECMA6で導入されました。矢印関数は外側スコープのthisをキャプチャします(つまり、thisを使用すると、それを含む関数のスコープを参照します)。しかし、通常の関数は独自のthisを持っています。実際には、矢印機能に独自のものがないという事実は、実際に導入された理由の1つです。 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

2つ目の違いは、矢印機能をバインドできないことです。

strictモードでは別の違いがあります。これが周囲の字句コンテキストから来ていることを考えると、これに関する厳密なモード規則は矢印関数によって無視されます。

基本的にどちらかのタスクを使用して同じタスクを実行することはできますが、場合によっては他のタスクよりも便利な場合もあります。

+2

これらは同等ではありません - 重要な違いがあります。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions –

+3

これらは**同等ではありません**! Arrow関数は外部スコープの 'this'を捕捉し、正規関数は' this'を持ちます。違いはありませんが、機能は同等ではないOPコードです。また、矢印関数を '.bind()'することはできません。 –