JavaScript中的“forEach(el => {})”和“forEach(function(){})”之间有什么区别

时间:2017-10-26 07:25:43

标签: javascript jquery selectors-api

现有项目中的这一行给出了语法错误

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

当我将forEach(e=> {更改为forEach(function(e) {时。它的工作正常。 但我不确定有什么区别,将来也不会产生任何问题。 谁能解释一下呢?

2 个答案:

答案 0 :(得分:2)

$scope.updateEmp = function (){ $scope.isReadonly = false; console.log("update Employee"); } forEach(e => { code })可以执行相同的任务,但它们本身并不相同。

第一个使用ECMA6中引入的新箭头功能。箭头函数捕获外部范围的forEach(function(e){ other code })(即当您使用this时,它指的是包含它的函数的范围。)但是,常规函数具有自己的this。箭头函数没有自己的this这一事实实际上是它被引入的原因之一。 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

第二个区别是你无法绑定箭头功能。

严格模式中出现另一个差异。鉴于这是来自周围的词汇上下文,箭头函数会忽略与此相关的严格模式规则。

因此,虽然您基本上可以使用其中任何一个执行相同的任务,但根据您的情况,一个可能比另一个更方便。

答案 1 :(得分:-1)

你不需要lambda函数中的方括号{}。 例如,您可以使用三元运算符来执行此操作。

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