我试图写一些javascript函数并意识到
function testFunction(input_1, input_2, input_3) {
alert("alert");
}
然而,当我调用这样的函数时:
<input type="button" value="click" onclick="testFunction("1", "2")">
为什么即使只有两个参数它仍能正常工作?
答案 0 :(得分:37)
无论函数的定义如何,您都可以使用任意数量的参数调用Javascript函数。
未传递的任何命名参数都是undefined
。
可以通过arguments
类似数组的对象访问额外的参数。
答案 1 :(得分:4)
实际上,您提供的参数数量并不重要。该函数解释它们并创建arguments
对象(作为参数数组)。
这是一个例子:
function sum(){
if(arguments.length === 0)
return 0;
if(arguments.length === 1)
return arguments[0];
return arguments[0] + sum.apply(this, [].slice.call(arguments, 1));
}
这不是最有效的解决方案,但它为函数处理参数提供了一个简短的高峰。
答案 2 :(得分:2)
因为javascript将您的参数视为数组;如果你永远不会超越第二个项目,它永远不会注意到参数缺失。
答案 3 :(得分:0)
第三个参数可以是可选的,默认值为null。 如果你明确想要一个参数,那么这是一个不同的故事
答案 4 :(得分:0)
答案 5 :(得分:0)
Javascript是一种非常动态的语言,对于未传递值的任何参数,它将假定值为“undefined”。
答案 6 :(得分:0)
尝试使用以下代码
var CVH = {
createFunction: function (validationFunction, extParamData, extParamData1) {
var originalFunction = validationFunction;
var extParam = extParamData;
var extParam1 = extParamData1;
return function (src, args) {
// Proxy the call...
return originalFunction(src, args, extParam, extParam1);
}
}
}
function testFunction(input_1, input_2, input_3) {
alert("alert");
}
您可以按以下方式调用此函数
<input type="button" value="click" onclick="CVH.createFunction(testFunction('1', '2'),'3','4')">
答案 7 :(得分:0)
JavaScript不支持方法重载,因此方法将按其出现的顺序执行,而与传递的参数无关。由于javascript没有对参数进行类型检查或所需的参数数量,因此您只能使用一种可以适应testFunction()的实现通过检查参数的类型,存在或数量来确定将哪些参数传递给它。