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

时间:2018-04-17 20:11:51

标签: javascript html

我的HTML有一个按钮,它运行一个调用其他几个JavaScript函数的函数。它看起来像这样:

<button id="ButtonSearch" onclick="FillAll()"></button>

函数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();
}

最后,实际函数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
}

奇怪的是FillMap()被调用两次,而alert会弹出两次:第一个是undefined而第二个是from_date。< / p>

一般来说,JavaScript函数是否与“常规”函数不同,其中参数的数量需要匹配?

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

2 个答案:

答案 0 :(得分:8)

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

FillMap();
FillMap(from_date, to_date);

对于问题的主要部分,在JavaScript中,所有参数都是可选的。除非另有说明,否则它们默认为undefined

function A(a, b, c) {
    console.log(a, b, c);
}

A(1, 2);

像Java和C#这样的严格类型的语言会抛出一个编译时错误,不会让你这样做。

JavaScript并不关心,并允许您以任何方式调用它。

使用ECMAScript 6,您现在可以直接指定默认值:

function A(a = 5) {
    console.log(a);
}

A();

在此之前(现在甚至在编译代码中),您经常会看到这种模式:

function A(a) {
    a = a || 5;
    console.log(a);
}

A();

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

答案 1 :(得分:3)

是的,您可以在不传递任何内容的情况下调用JavaScript函数。

JavaScript在某种意义上是独一无二的,因为它总是只是试图“工作”。所以你没有在第一次调用中定义一个参数,但它隐含地传递了那个奇怪的undefined参数。查看有关undefined primitive type

的更多信息
相关问题