Как вызвать функцию JavaScript с тем же именем, но с похожими аргументами - PullRequest
0 голосов
/ 31 октября 2018

У меня есть 2 функции JavaScript, которые похожи, но одна из них имеет жестко закодированную переменную, в то время как переменная другой функции должна быть определена при вызове. Извините, если то, что я говорю, не имеет смысла, но вот код, чтобы вам было легче его понять:

    function calculateCircumference()
    {
        var radius = 3;
        var circumference = Math.PI * 2 * radius;
        console.log("The circumference is " + circumference);
    }
    
    function calculateArea()
    {
        var radius = 3;
        var area = Math.PI * radius * radius;
        console.log("The area is " + area);
    }
    
    function calculateCircumference(radius)
    {
        var circumference = Math.PI * 2*radius;
        console.log("The circumference is " + circumference);
    }
    
    function calculateArea(radius)
    {
        var area = Math.PI * radius*radius;
        console.log("The area is " + area);
    }
    
    calculateCircumference();
    calculateArea();
    calculateCircumference(5);
    calculateArea(9);

Выход:

The circumference is NaN
The area is NaN
The circumference is 31.41592653589793
The area is 254.46900494077323

Я понимаю, что если я изменю имя функции второго calculateCircumference и calculateArea, весь код будет работать, но что я делаю не так, когда на выходе отображается NaN, когда оба имени функции то же самое?

Или все это просто неправильно и невозможно?

Любая помощь очень ценится, спасибо

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Ваш первоначальный вопрос описывает перегрузку функции , однако JavaScript не поддерживает ее (без хаков). Вместо этого, то, что решит Вашу проблему, является параметрами по умолчанию, которые возможны.

Поскольку ES6 , вы можете установить параметры по умолчанию непосредственно в объявлении функции:

function calculateCircumference(radius=3) {
    var circumference = Math.PI * 2 * radius;
    console.log("The circumference is " + circumference);
}

calculateCircumference();
calculateCircumference(5);

выход

The circumference is 18.84955592153876
The circumference is 31.41592653589793

Для pre-ES6 однако вам необходимо проверить, установлена ​​ли переменная внутри функции:

    function calculateCircumference(radius) {
        radius = typeof radius !== 'undefined' ? radius : 3;
        var circumference = Math.PI * 2 * radius;
        console.log("The circumference is " + circumference);
    }

    calculateCircumference();
    calculateCircumference(5);

выход

The circumference is 18.84955592153876
The circumference is 31.41592653589793
0 голосов
/ 31 октября 2018

использовать значение по умолчанию

function calculateArea(radius = 3)
{
    var area = Math.PI * radius*radius;
    console.log("The area is " + area);
}

вызов calculateArea() без аргументов по умолчанию будет использовать 3 в качестве радиуса

...