Javascript数组值从哪里来?

时间:2017-08-29 19:31:16

标签: javascript

所以,我需要你的帮助,看看这个剧本:

function findMax() {
  var i;

  var max = -Infinity;

  for (i = 0; i < arguments.length; i++) {
    if (arguments[i] > max) {
      max = arguments[i];
    }
  }

  return max;
}

document.getElementById("demo").innerHTML = findMax(4, 5, 10);

结果= 10

问题是程序如何知道参数中的三个中哪个数字进入参数[i]?我没有看到它在任何地方给它带来价值,它以某种方式将这个数组与变量&#34; max&#34;找出最大数量。希望有人能解释一下。

8 个答案:

答案 0 :(得分:2)

每个函数都有一个名为arguments的参数,它是一个类似于object的数组,包含调用函数时传递的参数。

正如更正式地陈述here

  

arguments对象是一个可用的局部变量   功能。您可以在函数中引用函数的参数   通过使用arguments对象。该对象包含每个条目   传递给函数的参数,从第一个条目开始的索引   0

&#13;
&#13;
function test(){
    for(var i = 0; i<arguments.length; i++){
       console.log(arguments[i]);
    }
}

test('a');
test(1,2,3);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

arguments对象是任何函数内部的固有自动值。该对象是 like 在调用时传递给函数的实际参数的数组。

如果你有一个函数,并且用一个值列表调用它,该函数可以通过arguments对象检查这些值。

答案 2 :(得分:0)

请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments

有关arguments对象的解释。

它是由Javascript自动完成的。参数按照给函数的顺序放在数组中。

答案 3 :(得分:0)

阅读本文:https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Functions/arguments

参数包含传递给函数的所有参数,因此在循环中它将循环它们

答案 4 :(得分:0)

  

问题是程序如何知道参数中的三个中哪个数字进入参数[i]?

这是在运行时确定的。调用发生时,会自动动态创建ServiceWorkerRegistration对象。

  

我没有看到它在任何地方给它带来价值,它以某种方式将这个数组与变量&#34; max&#34;找出最大数量。

其成员将是传递的参数的确切数量。如果你传递3个参数,它将使用成员arguments01创建,引用这三个参数。

所以在这一点上,出于迭代的目的,你可以将它视为一个数组,因为它也会使用args的总数来填充其2属性。

答案 5 :(得分:0)

arguments对象是一个类似于Array的对象,对应于传递给函数的参数。
它包含一个length属性,它是传递给函数的参数数量,[@@iterator]属性与array类似:arguments[i]包含并引用i索引处的元素。

The Function documentation提供了更多详细信息:

  

arguments对象是一个可用的局部变量   功能。您可以在函数中引用函数的参数   使用arguments对象。该对象包含每个条目   传递给函数的参数,从第一个条目开始的索引   例如,如果函数传递了三个参数,则可以按如下方式引用它们:

arguments[0]
arguments[1]
arguments[2]

答案 6 :(得分:0)

除了arguments

的给定解释之外
  

arguments对象是所有函数中可用的局部变量。您可以使用arguments对象在函数内引用函数的参数。该对象包含传递给函数的每个参数的条目,第一个条目的索引从0开始。

你可以将它的第一个元素作为起始值并从第二个元素开始迭代。优点是,你得到一个真正的价值,如果没有争论,那么你得到undefined而不是-Infinity

function findMax() {
    var i,
        max = arguments[0];

    for (i = 1; i < arguments.length; i++) {
        if (arguments[i] > max) {
            max = arguments[i];
        }
    }
    return max;
}

console.log(findMax(4, 5, 10)); // 10
console.log(findMax());         // undefined

答案 7 :(得分:0)

  

问题是程序如何知道参数中的三个中哪个数字进入参数[I]?

因为这就是你要求它做的事情; - )

如上所述,MDN有一个很好的页面,描述了参数数组是什么,如何访问它的每个元素以及如何操作参数数组。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments

回到你的代码,for循环遍历参数数组,所以这一行:

if (arguments[i] > max) {

实际上在说:

if (arguments[4] > max) {
if (arguments[5] > max) {
if (arguments[10] > max) {

在每次迭代时给定参数数组的长度(在本例中为3)