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

我的 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()被调用两次,警报弹出两次:第一个未定义,第二个显示from_date.

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

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

解决方法

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

FillMap();
FillMap(from_date,to_date);

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

function A(a,b,c) {
    console.log(a,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();

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

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...