javascript中的函数重载具有两个相同名称但输入数字不同的函数

时间:2013-12-07 00:42:42

标签: javascript

在javascript.js文件中,我定义了我的函数,我希望对不同的函数签名使用相同函数的不同定义。换句话说,可以在JavaScript中使用:

1//
function foo(a, b){
  return a+b;
} 

2//
function foo(a){
  var b=10;// giving default value to variable b and not proving its value as input 
return a+b;
} 

在某种程度上,如果我们想以foo(a)的形式调用foo(没有给定b),我试图将defualt值10赋给局部变量b。那么我们可以在同一个javascript文件中使用表单1和2来定义foo吗?

2 个答案:

答案 0 :(得分:0)

你可以这样做:

function foo(a, b){
  b = b || 10;
  return a+b;
}

如果没有为b传递值,则第一行将为b分配10,如果传递,则b将等于b,您可以使用传入的值。

唯一需要注意的是“虚假”值,例如0

答案 1 :(得分:0)

javascript中不能有两个具有相同名称的函数。无论哪个定义最后都将优先。

但是,您可以在运行时测试参数,并根据传递给函数的内容更改您的行为。这是一种常见的设计模式,并且被jQuery等库使用很多。

例如,在jQuery中,有一个函数.animate(),它以几种不同的方式传递1-4个参数:

.animate( properties [, duration ] [, easing ] [, complete ] )
.animate( properties, options )

只需要属性参数。所有其他参数都是可选的,jQuery通过检查传递的内容和类型来测试它们的存在,并确定您使用的是哪种形式以及存在哪些参数。

或者,另一个例子:

.toggle( [duration ] [, complete ] )
.toggle( options )
.toggle( duration [, easing ] [, complete ] )
.toggle( showOrHide )

使用参数类型和存在的运行时检查,所有这些表单都使用相同的函数实现。以下是您如何实现.toggle()的四种形式。

function toggle(duration, easing, complete) {
    if (typeof duration === "boolean") {
        // toggle(bool) form 
        //   and the showOrHide arg is in the duration argument

    } else if (typeof duration === "object") {
        // toggle(options) form
        //   and the options object is in the duration argument

    } else {
        // toggle(duration, complete)
        // toggle(duration, easing, complete)
        // if no 3rd arg, then easing must have been left out
        if (!complete) {
            // completion function is in the 2nd arg to move it
            // to the proper named arg
            complete = easing
            // easing wasn't passed, give it a default value
            easing = "linear";
        }
        // process it as toggle(duration, easing, complete)
        // here

    }
}