我的HTML有一个按钮,它运行一个调用其他几个JavaScript函数的函数.它看起来像这样:
<button id="ButtonSearch" onclick="FillAll()"></button>
Run Code Online (Sandbox Code Playgroud)
该函数FillAll()在文件中Calls.js,如下所示:
function FillAll()
{
var from_date = document.getElementById('FromDate').value;
var to_date = document.getElementById('ToDate').value;
FillMap();
FillMap(from_date, to_date);
FillRadio();
FillArea();
}
Run Code Online (Sandbox Code Playgroud)
最后,实际的函数FillMap(),在文件中Maps.js,看起来像这样:
function FillMap(from_date, to_date)
{
alert(from_date);
var from_date = document.getElementById('FromDate').value;
var to_date = document.getElementById('ToDate').value;
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,FillMap()它被调用两次,alert弹出两次:第一个是undefined第二个显示from_date.
一般来说,JavaScript函数是否与"常规"函数不同,其中参数的数量需要匹配?
在这种情况下,参数不匹配,但仍在调用函数.
好吧,它被调用了两次,因为你的代码中有两个调用:
FillMap();
FillMap(from_date, to_date);
Run Code Online (Sandbox Code Playgroud)
对于问题的主要部分,在JavaScript中,所有参数都是可选的.undefined除非另有说明,否则默认为:
function A(a, b, c) {
console.log(a, b, c);
}
A(1, 2);Run Code Online (Sandbox Code Playgroud)
像Java和C#这样的严格类型的语言会抛出一个编译时错误,不会让你这样做.
JavaScript并不关心,它会让你以任何方式调用它.
使用ECMAScript 6,您现在可以直接指定默认值:
function A(a = 5) {
console.log(a);
}
A();Run Code Online (Sandbox Code Playgroud)
在此之前(甚至现在编译成代码),您经常会看到这种模式:
function A(a) {
a = a || 5;
console.log(a);
}
A();Run Code Online (Sandbox Code Playgroud)
这是指定默认值的便捷方式.