Другой: uncaught typeerror undefined не является функцией

#javascript #function #typeerror

#javascript #функция #ошибка типа

Вопрос:

Ребята, я работаю над школьным проектом (на javascript) и строю подземелье. Скорее всего, это не лучший код, который вы когда-либо видели, но, да, я в школе для этого.

Я получаю ошибку от:

 function damageFormula()
{
    var damage = myDamage(myWeapon); // I get the error on this function
    var doDamage = Math.floor(0.085 * damage * myAttackLvl   (myLevelLvl/5) - (1 15*Math.random()));

    return doDamage;
};
 

Функция myDamage:

 function myDamage(myWeapon)
{
    switch(myWeapon)
    {
        case "Spike Sword":
            myDamage  = 10;
            break;
        case "Magic Long Sword":
            myDamage  = 20;
            break;
        default:
            myDamage  = 3;
            break;
    }
    return myDamage;
};
 

Переменная weapon:

 var myWeapon    = "Spike Sword";
 

А переменная myDamage равна:

 var myDamage    = 10;
 

Кто-нибудь знает, почему я получаю эту ошибку и / или как ее решить?

Если вам нужна дополнительная информация, спросите меня о чем угодно, и я постараюсь ответить на нее как можно лучше.

Комментарии:

1. из какой строки он исходит 🙂 ?

2. var damage = myDamage(myWeapon);

Ответ №1:

Потому myWeapon Spike Sword что, вы делаете это:

 case "Spike Sword":
        myDamage  = 10;
        break;
 

Однако myDamage() это функция, а не число, поэтому это не имеет смысла для консоли JavaScript! Вместо этого он превращается myDamage в строку, а затем помещается "10" в конец строки.

Теперь myDamage это строка. Однако в damageFormula() , вы вызываете myDamage как функцию. Таким образом, TypeError может быть выброшен, хотя для меня,

Я предлагаю делать var damage = 0; и делать damage = 10; , damage = 20; , и т.д..

Комментарии:

1. Большое спасибо! Это то, что я искал!

Ответ №2:

Будьте осторожны с вашими именами — вы используете myDamage как имя для функции, так и имя для переменной! Это создаст несогласованное состояние в вашем коде.

Вероятно, вы используете var myDamage где-то еще, делая его нулевым в области видимости.

Комментарии:

1. Спасибо за помощь! Я часами задавался вопросом, почему мой код не работает :/