使用不同参数执行的JavaScript函数

fdk*_*fsf 3 html javascript

我的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函数是否与"常规"函数不同,其中参数的数量需要匹配?

在这种情况下,参数不匹配,但仍在调用函数.

sam*_*ime 8

好吧,它被调用了两次,因为你的代码中有两个调用:

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)

这是指定默认值的便捷方式.