JavaScript 函数参数


目录

    显示目录


JavaScript 函数 不会执行任何检查 参数值(参数)。


函数参数和参数

在本教程的前面部分,您了解到函数可以具有 参数:

function functionName(parameter1, parameter2, parameter3) {
    // code to be executed
}

函数参数是列出的名称 函数定义。

函数参数是真正的 传递给函数(并由函数接收)。


参数规则

JavaScript 函数定义不指定数据类型 参数。

JavaScript 函数不会对传递的参数执行类型检查 论据。

JavaScript 函数不检查接收到的参数数量。


默认参数

如果调用函数时缺少参数(小于声明的参数),则缺少的值将设置为 未定义

有时这是可以接受的,但有时最好指定默认值 参数值:

例子

function myFunction(x, y) {
    if (y === undefined) {
    y = 2;
     }

}

自己尝试一下 →

<!DOCTYPE html>
<html>
<body>

<p>Setting a default value to a function parameter.</p>
<p id="demo"></p>

<script>
function myFunction(x, y) {
  if (y === undefined) {
    y = 2;
  }  
  return x * y;
}
document.getElementById("demo").innerHTML = myFunction(4);
</script>

</body>
</html>



默认参数值

ES6 允许函数参数有默认值。

例子

如果 y 未传递或未定义,则 y=10。

function myFunction(x, y = 10) {	  return x + y;
}
myFunction(5);

自己尝试一下 →

<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Functions</h1>
<h2>Default Parameter Values</h2>
<p>If y is not passed or undefined, then y = 10:</p>

<p id="demo"></p>

<script>
function myFunction(x, y = 10) {
  return x + y;
}
document.getElementById("demo").innerHTML = myFunction(5);
</script>

</body>
</html>

功能 其余参数

剩余参数 (...) 允许函数将不定数量的参数视为数组:

例子

function sum(...args) {
  let sum = 0;
  for (let arg of args) sum += arg;
  return sum;
}

let x = sum(4, 9, 16, 25, 29, 100, 66, 77);

自己尝试一下 →

<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Functions</h1>
<h2>The Rest Parameter</h2>

<p>The rest parameter (...) allows a function to treat an indefinite number of arguments as an array:</p>

<p id="demo"></p>

<script>
function sum(...args) {
  let sum = 0;
  for (let arg of args) sum += arg;
  return sum;
}

let x = sum(4, 9, 16, 25, 29, 100, 66, 77);

document.getElementById("demo").innerHTML = x;
</script>

</body>
</html>


参数对象

JavaScript 函数有一个称为参数的内置对象 目的。

参数对象包含函数运行时使用的参数数组 被调用(调用)。

这样你就可以简单地使用一个函数来查找(例如)最高的 数字列表中的值:

例子

x = findMax(1, 123, 500, 115, 44, 88);
function findMax() {
  let max = -Infinity;
    for (let i = 0; i < arguments.length; i++) {
      if (arguments[i] > max) {
      max = arguments[i];
      }
    }
    return max;
}

自己尝试一下 →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Functions</h2>
<p>Finding the largest number.</p>
<p id="demo"></p>

<script>
function findMax() {
  let max = -Infinity;
  for(let i = 0; i < arguments.length; i++) {
    if (arguments[i] > max) {
      max = arguments[i];
    }
  }
  return max;
} 
document.getElementById("demo").innerHTML = findMax(4, 5, 6);
</script>

</body>
</html>


或者创建一个函数来对所有输入值求和:

例子

x = sumAll(1, 123, 500, 115, 44, 88);

function sumAll() {
  let sum = 0;
    for (let i = 0; i < arguments.length; i++) {
    sum += arguments[i];
    }
    return sum;
}

自己尝试一下 →

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Functions</h2>
<p>Sum of all arguments:</p>
<p id="demo"></p>

<script>
function sumAll() {
  let sum = 0;
  for(let i = 0; i < arguments.length; i++) {
    sum += arguments[i];
  }
  return sum;
}
document.getElementById("demo").innerHTML = sumAll(1, 123, 500, 115, 44, 88);
</script>

</body>
</html>

如果调用函数时使用太多参数(多于声明的参数), 这些参数可以使用参数对象来获取。


参数按值传递

函数调用中的参数是函数的参数。

JavaScript 参数通过传递:仅限函数 了解值,而不是参数的位置。

如果函数改变参数的值,它不会改变参数的值 原始值。

对参数的更改在函数外部不可见(反映)。


对象通过引用传递

在 JavaScript 中,对象引用就是值。

因此,对象的行为就像通过引用传递:

如果函数更改对象属性,它会更改原始值。

对象属性的更改在函数外部可见(反映)。