为什么我不需要()在'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(),但这不起作用.()从功能的末尾删除工作.
这是为什么?
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事件关联,并在以后调用它.