Javascript 你的函数不是一个函数!打字错误

Javascript 你的函数不是一个函数!打字错误,javascript,Javascript,我有一个小RTS游戏,你可以攻击一个怪物。我希望它设置为当游戏加载或启动时,strike()函数将在3秒后触发。但是,当我运行下面的代码时,我得到一个类型错误,即“strike()”不是函数。如果它不是一个函数,那么它是什么呢 如果您想知道player.cc是什么意思,它代表当前角色。其余的只是指我在游戏中的一个平衡表 dom.el("strike").onclick = function strike() { HitCalc(player.cc, monster.cc); ac

我有一个小RTS游戏,你可以攻击一个怪物。我希望它设置为当游戏加载或启动时,
strike()
函数将在3秒后触发。但是,当我运行下面的代码时,我得到一个类型错误,即“strike()”不是函数。如果它不是一个函数,那么它是什么呢

如果您想知道
player.cc
是什么意思,它代表当前角色。其余的只是指我在游戏中的一个平衡表

dom.el("strike").onclick = function strike() {
    HitCalc(player.cc, monster.cc);
    actor.expCounter(player.cc);
    actor.balanceCounter(player.cc, monster.cc);
};

 setTimeout(strike(), 3000);
可能有帮助的其他代码:

dom = {
    el: function (id){
        return document.getElementById(id);
    },
HTML:

罢工

虽然您认为一个名为事件处理程序的函数仍然在当前作用域中被提升和声明,但在这一点上您错了:它仍然是一个分配给属性的函数,就像任何匿名内联函数一样

您需要的是:

function strike() {
    HitCalc(player.cc, monster.cc);
    actor.expCounter(player.cc);
    actor.balanceCounter(player.cc, monster.cc);
};

dom.el("strike").onclick = strike;

// Note that setTimeout expects a reference to the function rather than
// a function call!!
setTimeout(strike, 3000);

虽然您认为名称分配给事件处理程序的函数仍然在您当前的作用域中被提升和声明,但在这一部分您错了:它仍然是分配给属性的函数,就像任何匿名内联函数一样

您需要的是:

function strike() {
    HitCalc(player.cc, monster.cc);
    actor.expCounter(player.cc);
    actor.balanceCounter(player.cc, monster.cc);
};

dom.el("strike").onclick = strike;

// Note that setTimeout expects a reference to the function rather than
// a function call!!
setTimeout(strike, 3000);

setTimeout(罢工,3000)@斜视这并不是真正的重复,因为那里正在发生更有趣的事情。当然,
setTimeout(strike(),3000)
是一个明显的问题,但是命名函数表达式也有不正确的用法。
function strike(){HitCalc(player.cc,monster.cc);actor.expCounter(player.cc);actor.balanceCounter(player.cc,monster.cc);};dom.el(“strike”).onclick=strike;设置超时(罢工,3000)@dfsq:谢谢,你说得对。我错过了范围问题。@PranavCBalan这是当有人关闭它时我要回答的问题,我丢失了文本ARGH
setTimeout(strike,3000)@斜视这并不是真正的重复,因为那里正在发生更有趣的事情。当然,
setTimeout(strike(),3000)
是一个明显的问题,但是命名函数表达式也有不正确的用法。
function strike(){HitCalc(player.cc,monster.cc);actor.expCounter(player.cc);actor.balanceCounter(player.cc,monster.cc);};dom.el(“strike”).onclick=strike;设置超时(罢工,3000)@dfsq:谢谢,你说得对。我错过了范围问题。@PranavCBalan这是我将要回答的问题,当有人关闭它时,我丢失了我的文本。谢谢!我没有意识到我超出了我的范围,这就很好地解释了这个问题。谢谢你,先生@用户2763154没问题!;)非常感谢。我没有意识到我超出了我的范围,这就很好地解释了这个问题。谢谢你,先生@用户2763154没问题!;)