一.函数的参数
1.定义
-
形参:函数定义的参数
-
实参:函数调用时实际传递的参数
-
参数匹配时从做向右进行匹配。如果实参个数少于形参,后边的参数对应赋值
undefined
-
实参的个数如果多于形参的个数,可以通过
arguments
访问 -
函数对象的
length
属性就是函数形参的个数 -
参数的个数如果过多,最好将参数封装成对象来接收
-
函数的参数的值传递和引用传递
- 引用传递的参数,传递引用对象的地址。函数内部的修改会影响传递参数的引用对象。
- 值传递的是值类型的一个地址,函数内部不影响函数外部传递参数变量
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>函数参数值传递和引用传递</title>
</head>
<body>
<script>
var a = 9, b = { name: 'carolyn', age: 18 };
function demo(c, d) {
c = 10;
d.name = '666';
}
demo(a, b);
console.log(a); // 9
console.log(b); // {name: '666', age: 18}
</script>
</body>
</html>
2.函数arguments
的使用
arguments
是一个对应于传递给函数的参数的类数组对象
arguments
对象是所有(非箭头)函数中都可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。此对象包含传递给函数的每个参数,第一个参数在索引0处。
你可以通过以下方式使用它
arguments[0]
arguments[1]
arguments[2]
arguments
对象不是一个Array
。它类似于Array
,但除了length
属性和索引元素之外没有任何Array
属性。但是它可以被转换成数组
var args = Array.prototype.slice.call(arguments);
var args = [].slice.call(arguments);
// ES2015
const args = Array.from(arguments);
const args = [...arguments];
案例:使用arguments
实现Math
的max
函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>02-函数arguments实现max函数</title>
</head>
<body>
<script>
function myMax() {
if (arguments.length === 0) return NaN;
let max = arguments[0];
for (let index = 0; index < arguments.length; index++) {
if (arguments[index] > max) {
max = arguments[index]
}
}
return max
}
console.log(myMax()); // NaN
console.log(myMax(1, 2, 5, 14, 13)); // 14
</script>
</body>
</html>