例如:
function test(x) {
alert("This is a " + x);
}
test("test");
老实说,我没有看到它的重点(这可能是因为我对这个主题知之甚少),但如果你能解释一下,那就太棒了!
答案 0 :(得分:2)
JavaScript中有四种调用模式:方法 调用模式,函数调用模式,构造函数调用模式和apply 调用模式。这些模式在初始化奖励参数的方式上有所不同。 调用运算符是一对括号,它跟随任何产生函数值的表达式。该 括号可以包含零个或多个表达式,以逗号分隔。每个表达式产生一个 论证价值。每个参数值都将分配给函数的参数名称。 没有 参数个数和参数个数不匹配时的运行时错误。如果有的话 许多参数值,额外的参数值将被忽略。如果参数值太少,那么 未定义的值将替换缺少的值。对参数没有类型检查 值:任何类型的值都可以传递给任何参数。
“JavaScript:Douglas Crockford撰写的好文章。版权所有2008 Yahoo! Inc., 978-0-596-51774-8“。
答案 1 :(得分:2)
Javascript不支持函数重载,但每次调用函数时,arguments
变量都会设置一个包含所有传递参数的数组,即使它们未在函数声明中命名。例如:
function prod() {
var res = 1;
for (var i = 0; i < arguments.length; i++)
res *= arguments[i];
return res;
}
var p = prod(5, 3, 7); // => 105
注意:arguments
实际上不是Array
对象,即它不具有相同的prototype
。但它很容易转换为数组:
var args = Array.prototype.slice.call(arguments, 0);
答案 2 :(得分:2)
参数允许替换:我们不是一遍又一遍地编写相同的代码,而是使用我们自己的值重新使用它。在你的示例中,该方法没有做太多,所以没什么优势。
但只需稍微调整一下,就可能更有意义了:
function test(x) {
var y = x * 2
if (y === NaN) {
alert("That was no number!");
} else {
alert("Multiplied by 2, " + x + " is " + y);
}
}
我们不希望每次想要运行该代码时都写出来,代替我们的值:
var y = "test" * 2
if (y === NaN) {
alert("That was no number!");
} else {
alert("Multiplied by 2, test is " + y);
}
var y = 5 * 2
if (y === NaN) {
alert("That was no number!");
} else {
alert("Multiplied by 5, test is " + y);
}
注意:值可能来自表单,数据库,Web服务等。 在我们的例子中,它是硬编码的,但在现实生活中,这种可能性较小。
相反,我们创建了test
方法,这是一种处理我们关心的案例的通用代码。
然后我们可以写:
test("test");
test(5);
如果我们需要做什么更改,我们更改单个test
方法,而不是找到代码中我们使用相同逻辑的所有位置。这使程序维护和测试更容易。
答案 3 :(得分:0)
这将在没有参数检查的情况下工作
注意:如果你在函数中使用该参数,那么最好在函数调用中传递它,否则它仍然是“未定义的”......
最终结论
function test(a)
{
alert(a);
}
test(1); // outputs 1
test(); // outputs undefined
当你没有传递参数的值时,它设置为undefined。你不会得到例外。它可以是一种方便的方法,使您的功能在某些情况下更通用。未定义的计算结果为false,因此您可以检查是否在
中传递了值