JavaScript 中的函数参数是在函数定义中括号内列出的变量。一个函数可以有多个由逗号分隔的参数。当函数被调用时传递给函数的值被称为参数值。我们通过定义参数来定义函数,并通过传递参数值来调用函数。
传递给函数的参数值数量必须与函数定义中的参数数量匹配。如果不匹配,可能会得到意想不到的结果。
语法
在 JavaScript 中使用函数参数的语法如下:
function functionName (parameter1, parameter2, parameter3) {
}
在上述语法中,函数参数是 parameter1
, parameter2
, 和 parameter3
。
参数规则
JavaScript 函数在调用时不会检查传递的参数值的数量。
不需要指定函数参数的数据类型。
JavaScript 编译器不会对传递给函数的参数值执行类型检查。
JavaScript 中的函数参数值是指在调用函数时传递给函数的变量或值。
functionName (10, b, 'Hello');
在上述语法中,第一个参数值是数字数据类型,第三个是字符串数据类型。第二个参数值是变量,该变量在代码中早些时候定义过。
示例:函数参数和参数值
在下面的代码中,mult()
函数有四个参数。你可以注意到参数的类型并未定义。我们在函数体中将参数值相乘,并返回结果值。
在调用函数时,我们传递了四个数字作为函数的参数值。用户可以观察函数对于不同参数值的输出。
<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 =
"2, 3, 和 4 的乘积是 " + ans;
</script>
</body>
</html>
输出:
2, 3, 和 4 的乘积是 24
参数对象
在 JavaScript 中,每个函数都可以有一个 arguments
对象。它包含了在调用函数时以数组形式传递的所有参数值。即使函数的参数未定义,我们也可以遍历这个数组来获取每一个参数值。
示例
在下面的示例中,函数定义中没有包含任何参数,但在调用函数时我们传递了四个参数值。因此,我们在函数体中使用循环遍历 arguments[]
数组来逐个访问所有的参数值。
在函数体中,我们将所有参数值合并并返回最终的字符串。
<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 =
"合并后的字符串是: " + ans;
</script>
</body>
</html>
输出:
合并后的字符串是: Hi I am John!
按值传递参数
在函数中,当你按值传递参数到函数调用时,它将参数值发送给函数定义中的参数。因此,当你更新函数参数时,函数的参数值不会改变。
示例
在下面的代码中,我们在函数外部定义了 val1
和 val2
变量,并将它们作为函数的参数值传递。
在函数体中,我们更改了参数值。在输出中,你可以看到即使更新了参数值,val1
和 val2
的实际值也没有改变。
<html>
<head>
<title> JavaScript - 参数值按值传递 </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 += "调用函数之前!<br>";
output.innerHTML += "val1 = " + val1 + ", val2 = " + val2 + "<br>";
update(val1, val2);
output.innerHTML += "调用函数之后!<br>";
output.innerHTML += "val1 = " + val1 + ", val2 = " + val2 + "<br>";
</script>
</body>
</html>
输出:
调用函数之前!
val1 = Hello, val2 = World
调用函数之后!
val1 = Hello, val2 = World
按引用传递参数
当你传递一个对象作为参数值时,函数将对象的地址作为参数发送给函数定义。因此,这被称为参数值按引用传递。
在函数体中,如果你更改了对象的属性,那么在函数外部也会反映出来。
示例
在下面的代码中,我们将 obj
对象作为函数的参数值传递。在函数体中,我们更改了对象的 domain
属性的值。
在输出中,你可以看到即使在调用函数之后,domain
属性的值发生了变化,因为对象是按引用传递的。
<html>
<head>
<title> JavaScript - 参数值按引用传递 </title>
</head>
<body>
<p id="output"> </p>
<script>
const output = document.getElementById("output");
function update(obj) {
obj.domain = "yoagoa.com";
}
var obj = {
domain: "www.google.com",
}
output.innerHTML += "调用函数之前!<br>";
output.innerHTML += "domain = " + obj.domain + "<br>";
update(obj);
output.innerHTML += "调用函数之后!<br>";
output.innerHTML += "domain = " + obj.domain + "<br>";
</script>
</body>
</html>
输出:
调用函数之前!
domain = www.google.com
调用函数之后!
domain = yoagoa.com