我有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
时显示的这两个函数名都一样吗?
或者这整个事情是完全错误的,不可能吗?
非常感谢您的帮助,谢谢
答案 0 :(得分:5)
您最初的问题描述了function overloading,但是JavaScript不支持它(没有hack)。相反,可以解决您问题的是可能的默认参数。
自 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
对于 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
答案 1 :(得分:4)
使用默认值
\\
不带参数调用dat <- "<tr><td>1</td><td>11 Com</td><td>b</td><td>Radial Velocity</td><td>1</td><td>326.03</td><td>1.29</td><td></td><td>19.4</td><td></td><td>2.7</td></tr>"
a<-gsub("<tr>",0,dat)
a<-gsub("<td>",0,a)
a<-gsub("<\\/td>",0,a)
a<-gsub("<\\/tr>",0,a)
a
[1] "0010011 Com00b00Radial Velocity0 \n0100326.03001.29000019.4000 \n02.700"
将默认使用3作为半径