为什么我不需要使用()
来调用'for'循环或'.addEventListener()'方法中的函数?例如:
function activitiesReset()
{activitiesLegend.style = '';
}
for (var i=0; i<checkboxes.length; i++) {
checkboxes[i].addEventListener('change', activitiesReset);
}
在addEventListener方法中,我首先尝试调用我的函数activitiesReset()
,但这不起作用。从函数末尾删除()
。
为什么?
答案 0 :(得分: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
就像我将函数值传递给callFuncWithTwoParams
一样,您将函数值传递给addEventListener
。浏览器将记住该功能并将其与change
事件关联,并稍后调用它。