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 中,对象引用就是值。
因此,对象的行为就像通过引用传递:
如果函数更改对象属性,它会更改原始值。
对象属性的更改在函数外部可见(反映)。