-3

例如:

    function test(x) {
       alert("This is a " + x);
    }

    test("test");

老实说,我没有看到其中的意义(可能是因为我对这个主题没有太多了解),但如果你能解释一下,那就太棒了!

4

4 回答 4

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方法,而不是找到我们使用相同逻辑的代码中的所有地方。这使得程序维护和测试更容易。

于 2012-06-08T11:22:34.513 回答
2

JavaScript 中有四种调用模式:方法调用模式、函数调用模式、构造函数调用模式和应用调用模式。模式的不同在于如何初始化奖金参数。调用运算符是一对括号,跟在任何产生函数值的表达式之后。括号可以包含零个或多个表达式,以逗号分隔。每个表达式产生一个参数值。每个参数值都将分配给函数的参数名称。当参数的数量和参数的数量不匹配时,不会出现运行时错误。如果参数值太多,多余的参数值将被忽略。如果参数值太少,未定义的值将替换缺失的值。参数值没有类型检查:任何类型的值都可以传递给任何参数。

“JavaScript:Douglas Crockford 的优秀部分。版权所有 2008 Yahoo! Inc., 978-0-596-51774-8。”

于 2012-06-08T08:35:36.170 回答
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);
于 2012-06-08T08:36:56.483 回答
0

这将在没有参数检查的情况下工作在这里

演示

注意:如果您在函数中使用该参数,那么最好在函数调用中传递它,否则它仍然是“未定义”...

最终结论

function test(a) 
{     
  alert(a); 
}  

test(1); // outputs 1 
test(); // outputs undefined 

当您不传递参数的值时,它设置为未定义。你没有例外。在某些情况下,这可能是一种使您的功能更加通用的便捷方法。Undefined 的计算结果为 false,因此您可以检查是否传入了值

于 2012-06-08T08:17:11.220 回答