微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么此函数立即执行

如何解决为什么此函数立即执行

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 举报,一经查实,本站将立刻删除。