[英]JavaScript functions executed with different arguments
我的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
。
一般来说,JavaScript函数是否与“常规”函数不同,其中参数的数量需要匹配?
在这种情况下,参数不匹配,但仍在调用函数。
好吧,它被调用了两次,因为你的代码中有两个调用:
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();
这是指定默认值的便捷方式。
是的,您可以调用JavaScript函数而不将任何内容传递给它。
JavaScript在某种意义上是独一无二的,因为它总是只是试图“工作”。所以你没有在第一次调用中定义一个参数,但它隐含地传递了那个奇怪的undefined
参数。 查找有关未定义基元类型的更多信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.