我的
HTML有一个按钮,它运行一个调用其他几个
JavaScript函数的函数.它看起来像这样:
<button id="ButtonSearch" onclick="FillAll()"></button>
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.
解决方法
好吧,它被调用了两次,因为你的代码中有两个调用:
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();
这是指定默认值的便捷方式.