JavaScript - 函数参数
函数参数和实参
JavaScript 中的函数参数是函数定义中括号内列出的变量。一个函数可以包含多个用逗号分隔的参数。函数实参是调用函数时传递给函数的值。我们定义函数时列出参数,并传递实参来调用函数。
传递给函数的实参数量必须与函数定义中的参数数量一致。否则,可能会得到意想不到的结果。
语法
在 JavaScript 中使用函数参数的语法如下:
function functionName (parameter1, parameter2, parameter3) {
//语句
}
在上述语法中,函数参数分别为"parameter1"、"parameter2"和"parameter3"。
参数规则
JavaScript 函数在调用时不会检查传递的参数数量。
无需指定函数参数的数据类型。
JavaScript 编译器不会对传递的函数参数执行类型检查。
JavaScript 函数参数调用函数时传递给函数的变量或值。
functionName (10, b, 'Hello');
在上述语法中,第一个参数是数字数据类型,第三个参数是字符串数据类型。第二个参数是变量,该变量在代码中已定义。
示例:函数参数和实参
在下面的代码中,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
arguments (参数)对象
在 JavaScript 中,每个函数都有一个"arguments"对象。它以数组形式包含调用函数时传递的所有参数。即使函数的形参未指定,我们也可以遍历该数组并获取每个参数。
示例
在下面的示例中,函数定义不包含任何形参,但我们在调用函数时传递了 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!
按值传递参数
在函数中,当您按值传递参数给函数调用时,它会将参数值传递给函数定义的形参。因此,当您更新函数形参时,函数形参不会发生变化。
示例
在下面的代码中,我们在函数外部定义了"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
通过引用传递参数
当将对象作为参数传递时,函数会将对象的地址作为参数传递给函数定义。因此,这被称为通过引用传递参数。
在函数体中,如果更改对象的属性,也会反映到函数外部。
示例
在下面的代码中,我们将"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.cainiaomax.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.cainiaomax.com

