如果我不在Javascript函数中传递参数会发生什么?

Pea*_*key 76 javascript overloading

我是新来的Javascript的世界里,有写非常基本的功能,修补和在下面的例子中被偶然事故,我不能确定为什么它的时候我不传递参数时,功能需求它的工作原理.

样本功能

function myfunction(x) {
    alert("This is a sample alert");
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我调用该函数,myfunction();我将收到警报.为什么我没有传递参数时能够在没有任何错误或警告的情况下调用该函数?

编辑

我没想到这么多伟大的答案,我绝不在一个位置,但能说哪个答案是最好的所以我只能对请求人提出最好的答案,我会奖励接受该人.

gdo*_*ica 95

什么都不会发生 - 意味着你不会得到错误或警告,因为在javascript中传递参数是可选的.
所有未"提供"的参数都将具有该undefined.

function foo(x, y, z){
    //...
}

foo(1);
Run Code Online (Sandbox Code Playgroud)

foo现在里面的功能:

function foo(x, y, z){
    x === 1
    y === undefined
    z === undefined
}
Run Code Online (Sandbox Code Playgroud)

您甚至可以传递更多参数,例如:

foo(1,2,3,4,5,7); // Valid!
Run Code Online (Sandbox Code Playgroud)

您可以知道arguments.length函数内部提供的参数数量.

function foo(x, y, z) {
    console.log('x value: ' + x);
    console.log('y value: ' + y);
    console.log('z value: ' + z);
    console.log('Arguments length: ' + arguments.length);
}
console.log('Zero parameters');
foo();
console.log('Four parameters');
foo(1, 2, 3, 4);
Run Code Online (Sandbox Code Playgroud)

处理任意数量参数的有用函数示例:

function max() {
    var maxValue = arguments[0];
    for (var i = 1; i < arguments.length; i++) {
        if (maxValue < arguments[i]) {
            maxValue = arguments[i];
        }
    }
    return maxValue;
}

alert(max(1, 5, 7, 2, 88, 32, 44));
Run Code Online (Sandbox Code Playgroud)


j08*_*691 8

JavaScript函数中的所有参数都是可选的(读取"松散类型").

无论函数定义中指定的参数数量是多少,都可以使用任意数量的参数调用JavaScript函数.因为函数是松散类型的,所以它无法声明它所期望的参数类型,将任何类型的值传递给任何函数都是合法的.当使用少于声明的参数调用函数时,其他参数具有未定义的值.

您可以使用命名参数变量或arguments对象来引用函数中的函数参数.此对象包含传递给函数的每个参数的条目,第一个条目的索引从0开始.例如,如果函数传递了三个参数,则可以按如下方式引用参数:

arguments[0]
arguments[1]
arguments[2]
Run Code Online (Sandbox Code Playgroud)
  • JavaScript - 权威指南,第5版


Poi*_*nty 6

这就是JavaScript的工作原理.参数是可选的,如果函数调用中缺少参数,则函数中的not-really-a值将为"undefined".

"可选"我的意思是:调用任何函数都涉及一个任意长的参数列表.传递给函数的参数数量与声明的数量之间不需要关系.想到这个宣言的最佳方式是:

function x(a, b, c) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

就是你要声明一个函数并将名称"a"绑定到第一个参数,"b"绑定到第二个参数,将"c"绑定到第三个参数.但是,它并不能保证,任何这些都将在以后的任何给定函数调用中实际绑定到一个值.

出于同样的原因,你可以定义一个没有任何参数的函数,然后通过arguments对象"找到"它们:

function noArgs() {
  var a = arguments[0], b = arguments[1], c = arguments[2];
  // ...
}
Run Code Online (Sandbox Code Playgroud)

所以这与第一个功能并不完全相同,但它在大多数方面都很接近,实际上是非常重要的.

JavaScript中的"未定义"值是一个值,但它的语义与语言一样不同寻常.特别是它与null价值并不完全相同.另外,"undefined"本身不是关键字; 它只是一个半特殊的变量名!


Roc*_*mat 5

JavaScript 不像其他语言那样有函数参数的默认值。因此,您可以根据需要传递任意数量的参数。

如果不传递值,则参数为undefined

function myfunction(x) {
    alert(x);
}

myfunction(); // alerts undefined
myfunction(1); // alerts 1
myfunction(1,2,3); // alerts 1
Run Code Online (Sandbox Code Playgroud)

如果您传递的参数多于签名中的参数,则可以使用arguments.

function myfunction(x) {
    alert(x);
    console.log(arguments);
}

myfunction(1,2,3); // alerts 1, logs [1,2,3]
Run Code Online (Sandbox Code Playgroud)