如何调用具有相同名称但类似参数的JavaScript函数

wol*_*avi 0 javascript overloading

我有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);
Run Code Online (Sandbox Code Playgroud)

输出:

The circumference is NaN
The area is NaN
The circumference is 31.41592653589793
The area is 254.46900494077323
Run Code Online (Sandbox Code Playgroud)

我明白,如果我改变第二的函数名calculateCircumferencecalculateArea,整个代码会工作,但我在做什么错误是显示NaN在输出的时候两者的函数名是一样的吗?

或者这整件事情是完全错误的并且不可能?

非常感谢任何帮助,谢谢

Joh*_*han 5

您的初始问题描述了函数重载,但JavaScript不支持它(没有hacks).相反,什么将解决您的问题是可能的默认参数.

ES6开始,您可以直接在函数声明中设置默认参数:

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

calculateCircumference();
calculateCircumference(5);
Run Code Online (Sandbox Code Playgroud)

输出:

The circumference is 18.84955592153876
The circumference is 31.41592653589793
Run Code Online (Sandbox Code Playgroud)

但是对于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);
Run Code Online (Sandbox Code Playgroud)

输出:

The circumference is 18.84955592153876
The circumference is 31.41592653589793
Run Code Online (Sandbox Code Playgroud)