我必须遵循以下代码:
resetAll()
我试图让这个函数脱离这个循环,但它似乎不起作用。有什么建议吗?
var box = document.getElementsByClassName('Box');
for(i=0; i<box.length; i++){
box[i].onclick = function(){
this.classList.toggle('active');
};
}
答案 0 :(得分:3)
使用对该功能的引用。
box[i].onclick = getBlue;
如果添加括号,则调用该函数并将box[i].onclick
的值设置为getBlue
的返回值,在这种情况下为undefined
,因为它不返回任何内容。
答案 1 :(得分:1)
你在这里调用函数:
getBlue
而是将box[i].onclick = getBlue;
作为处理程序传递;
{{1}}
答案 2 :(得分:1)
在大多数情况下,您可以使用其值替换变量。因此,让我们用函数定义替换<Portfolio contentItems={fetchedItems} />
。这应该与第一个示例完全相同:
getBlue
哦,哦!没关系函数名称,但这看起来不像第一个例子!在函数之后有box[i].onclick = getBlue();
function getBlue(){
this.classList.toggle('active');
}
// becomes
box[i].onclick = function getBlue(){
this.classList.toggle('active');
}();
,它不会出现在第一个例子中:
()
他们来自哪里?从box[i].onclick = function(){
this.classList.toggle('active');
}; // <- no () here
开始。函数后getBlue()
做什么?他们称这个功能。现在应该清楚的是,在第一个示例中,您实际上并未调用该函数,只需将该函数的引用分配给()
。
现在知道了,我们知道正确的替换应该如何:
onclick
没有box[i].onclick = getBlue;
。