关于Javascript函数参数的问题

时间:2011-06-22 20:41:29

标签: function javascript

我试图写一些javascript函数并意识到

function testFunction(input_1, input_2, input_3) {
       alert("alert");
}

然而,当我调用这样的函数时:

<input type="button" value="click" onclick="testFunction("1", "2")">

为什么即使只有两个参数它仍能正常工作?

8 个答案:

答案 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()的实现通过检查参数的类型,存在或数量来确定将哪些参数传递给它。