在循环和方法中调用函数不需要()?

Kyl*_*lla -1 javascript

为什么我不需要()在'for'循环或'.addEventListener()'方法中调用函数?例如:

function activitiesReset() 
  {activitiesLegend.style = '';
}   

for (var i=0; i<checkboxes.length; i++) {
  checkboxes[i].addEventListener('change', activitiesReset);
}
Run Code Online (Sandbox Code Playgroud)

在addEventListener方法中,我首先尝试调用我的函数activitiesReset(),但这不起作用.()从功能的末尾删除工作.

这是为什么?

Ama*_*dan 5

checkboxes[i].addEventListener('change', activitiesReset)不打电话activitiesReset.它activitiesReset作为一个论点传递.activitiesReset是一个功能本身; activitiesReset()是对函数的调用,评估其返回值.您希望将事件侦听器设置为您的函数,而不是undefined(这是调用您的函数的结果).

理解这一点的关键是JavaScript中的函数也是值,就像数字或字符串或对象一样.(事实上​​,它们是一种特定的对象.)

var adderFuncValue = function(x, y) { return x + y; };
function multiplierFuncValue(x, y) { return x * y; };

function callFuncWithTwoParams(func, p1, p2) {
  func(p1, p2);
}

callFuncWithTwoParams(adderFuncValue, 3, 5); // 8
callFuncWithTwoParams(multiplierFuncValue, 2, 3); // 6
var someFunc = adderFuncValue;
someFunc(7, 8); // 15
Run Code Online (Sandbox Code Playgroud)

就像我将函数值callFuncWithTwoParams传递给你一样,你将函数值传递给addEventListener.浏览器将记住该功能并将其与change事件关联,并在以后调用它.