在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吗?
答案 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
}
}