如何解决为什么此函数立即执行
const ATTACK_VALUE = 10;
const STRONG_ATTACK_VALUE = 17;
const MONSTER_ATTACK_VALUE = 14;
function attackHandler( typeOfAttack ) {
const damageOne = typeOfAttack
const damageTwo = dealMonsterdamage(damageOne)
currentMonsterHealth -= damageTwo;
playerdamage = dealPlayerdamage(MONSTER_ATTACK_VALUE);
currentPlayerHealth -= playerdamage;
if ( currentMonsterHealth <= 0 && currentPlayerHealth > 0 ) {
alert('You won!');
} else if ( currentPlayerHealth <= 0 && currentMonsterHealth > 0 ) {
alert('You lost!');
} else if ( currentPlayerHealth <= 0 && currentMonsterHealth <= 0 ) {
alert('You have a draw');
}
}
attackBtn.addEventListener( 'click',attackHandler( ATTACK_VALUE ) );
strongAttackBtn.addEventListener( 'click',attackHandler( STRONG_ATTACK_VALUE ) );
其他代码
function dealMonsterdamage(damage) {
const dealtdamage = Math.random() * damage;
monsterHealthBar.value = +monsterHealthBar.value - dealtdamage;
return dealtdamage;
}
我刚刚开始学习编码,并且一直在学习教程,以为可以尝试,所以我想知道为什么这行不通。立即执行,之后的按钮不起作用
解决方法
您必须将函数调用更改为以下内容:
attackBtn.addEventListener(
'click',function() {
attackHandler(ATTACK_VALUE);
}
);
strongAttackBtn.addEventListener(
'click',function() {
attackHandler(STRONG_ATTACK_VALUE);
}
);
addEventListener的第二个参数是回调。引发事件后,将执行回调。
然后回调正在调用所需的函数。
更新:
由于要与StackOverflow的其他成员进行辩论,我删除了对箭头函数的引用作为回调。
他们是对的。如果您不是经验丰富的开发人员,那么这可能不是一个好习惯。
[....]部分答案已删除
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。