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
-
在调用函数时,JavaScript 函数不会检查传递的参数数量。
-
无需指定函数参数的数据类型。
-
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