Javascript 简明教程

JavaScript - Function Parameters

Function Parameters and Arguments

JavaScript 中的 function parameters 是在函数定义中列在括号内的变量。一个函数可以有多个由逗号分隔的参数。 function arguments 是在调用函数时传递给函数的值。我们定义了列出参数的函数,并调用了传递参数的函数。

传递给函数的参数数量必须与函数定义中的参数数量相匹配。否则,你可能会得到意外的结果。

Syntax

在 JavaScript 中使用 function parameters 的语法如下 −

function functionName (parameter1, parameter2, parameter3) {
  //statements
}

在上述语法中,函数参数为“parameter1”、“parameter2”和“parameter3”。

Parameter Rules

  1. 在调用函数时,JavaScript 函数不会检查传递的参数数量。

  2. 无需指定函数参数的数据类型。

  3. JavaScript 编译器不会对传递的函数参数执行类型检查。

JavaScript function arguments 是在调用函数时传递给该函数的变量或值。

functionName (10, b, 'Hello');

在上述语法中,第一个参数为数字数据类型,第三个参数为字符串数据类型。第二个参数是变量,在代码中已定义。

Example: Function Parameters and Arguments

在以下代码中,mult() 函数采用 4 个参数。可以看出,没有定义参数类型。我们在函数主体中乘以参数值并返回结果值。

在调用函数时,我们将 4 个数字值作为函数参数传递。用户可以查看函数针对不同函数参数输出的内容。

<html>
<body>
   <p id = "output"> </p>
   <script>
      function mult(a, b, c) {
         let res = a * b * c;
         return res;
      }
      let ans = mult(2, 3, 4);
      document.getElementById("output").innerHTML =
	  "The multiplication of 2, 3, and 4 is " + ans;
   </script>
</body>
</html>
The multiplication of 2, 3, and 4 is 24

Argument Object

在 JavaScript 中,每个函数都可以有一个“arguments”对象。调用函数时,它会以数组格式包含所有传递的参数。我们可以遍历数组并获取每个参数,即使未指定函数的参数。

Example

在以下示例中,函数定义不包含任何参数,但在调用函数时,我们传递了 4 个参数。因此,我们在函数主体中使用循环遍历 arguments[] 数组,以逐个访问所有参数。

在函数主体中,我们将所有参数合并,并返回“final”字符串。

<html>
<body>
   <p id = "output"> </p>
   <script>
      function merge() {
         let final = "";
         for (let p = 0; p < arguments.length; p++) {
            final += arguments[p] + " ";
         }
         return final;
      }
      let ans = merge("Hi", "I", "am", "John!");
      document.getElementById("output").innerHTML =
	  "The merged string is: " + ans;
   </script>
</body>
</html>
The merged string is: Hi I am John!

Passing Arguments by Value

在函数中,当通过值将参数传递给函数调用时,它会将参数值发送给函数定义的参数。因此,当你更新函数参数时,函数参数不会发生变化。

Example

在以下代码中,我们在函数外定义了“val1”和“val2”变量,并将它们作为函数参数传递。

在函数主体中,我们更改参数值。在输出中,可以看到即使更新了参数值,“val1”和“val2”的实际值也没有发生变化。

<html>
<head>
   <title> JavaScript - Arguments are passed by value </title>
</head>
<body>
   <p id = "output"> </p>
   <script>
      const output = document.getElementById("output");
      function update(val1, val2) {
         val1 = 20;
         val2 = 30;
      }

      var val1 = "Hello";
      var val2 = "World";

      output.innerHTML += "Before calling the function! <br>";
      output.innerHTML += "val1 = " + val1 + ", val2 = " + val2 + "<br>";

      update(val1, val2);

      output.innerHTML += "After calling the function! <br>";
      output.innerHTML += "val1 = " + val1 + ", val2 = " + val2 + "<br>";
    </script>
</body>
</html>
Before calling the function!
val1 = Hello, val2 = World
After calling the function!
val1 = Hello, val2 = World

Passing Arguments by Reference

当你将对象作为参数传递时,函数会将对象的地址作为参数发送给函数定义。因此,这被称为通过引用传递参数。

在函数主体中,如果你更改了对象的属性,它也将反映到函数外部。

Example

在以下代码中,我们将“obj”对象作为函数参数传递。在函数主体中,我们更改对象的“domain”属性的值。

在输出中,可以看到“domain”属性的值在调用该函数后,即使在函数外部也发生了变化,这是因为对象是通过引用传递的。

<html>
<head>
   <title> JavaScript - Arguments are passed by reference </title>
</head>
<body>
   <p id = "output"> </p>
   <script>
      const output = document.getElementById("output");
      function update(obj) {
         obj.domain = "www.tutorialspoint.com";
      }
      var obj = {
         domain: "www.google.com",
      }
      output.innerHTML += "Before calling the function! <br>";
      output.innerHTML += "domain = " + obj.domain + "<br>";
      update(obj);
      output.innerHTML += "After calling the function! <br>";
      output.innerHTML += "domain = " + obj.domain + "<br>";
    </script>
</body>
</html>
Before calling the function!
domain = www.google.com
After calling the function!
domain = www.tutorialspoint.com