例如:
function test(x) {
alert("This is a " + x);
}
test("test");
老实说,我没有看到其中的意义(可能是因为我对这个主题没有太多了解),但如果你能解释一下,那就太棒了!
例如:
function test(x) {
alert("This is a " + x);
}
test("test");
老实说,我没有看到其中的意义(可能是因为我对这个主题没有太多了解),但如果你能解释一下,那就太棒了!
参数允许替换:我们不是一遍又一遍地编写相同的代码,而是使用我们自己的值重新使用它。在您的示例中,该方法的作用不大,因此几乎没有优势。
但只需稍作调整,它可能更有意义:
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
方法,而不是找到我们使用相同逻辑的代码中的所有地方。这使得程序维护和测试更容易。
JavaScript 中有四种调用模式:方法调用模式、函数调用模式、构造函数调用模式和应用调用模式。模式的不同在于如何初始化奖金参数。调用运算符是一对括号,跟在任何产生函数值的表达式之后。括号可以包含零个或多个表达式,以逗号分隔。每个表达式产生一个参数值。每个参数值都将分配给函数的参数名称。当参数的数量和参数的数量不匹配时,不会出现运行时错误。如果参数值太多,多余的参数值将被忽略。如果参数值太少,未定义的值将替换缺失的值。参数值没有类型检查:任何类型的值都可以传递给任何参数。
“JavaScript:Douglas Crockford 的优秀部分。版权所有 2008 Yahoo! Inc., 978-0-596-51774-8。”
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);
这将在没有参数检查的情况下工作在这里
注意:如果您在函数中使用该参数,那么最好在函数调用中传递它,否则它仍然是“未定义”...
最终结论
function test(a)
{
alert(a);
}
test(1); // outputs 1
test(); // outputs undefined
当您不传递参数的值时,它设置为未定义。你没有例外。在某些情况下,这可能是一种使您的功能更加通用的便捷方法。Undefined 的计算结果为 false,因此您可以检查是否传入了值