[Day19] 参数(上)

前面讲 函式 function 时提到参数,回头看自己打的文章发现错误的地方修正了一下。
Parameter:函式宣告里的参数。
Argument:引数,呼叫函式时传给 params 的资料。

练习:观察不同形式的函式参数的位置

// 练习改成函式运算式
const sum = function (a, b) {
  return a + b;
};
// 练习改成箭头函式
const sum = (a, b) => a + b ;

在呼叫函式的时候最常见的就是函式名称加上小括号 (),而小括号内就是传给参数的值,也称引数 (arguments)。
而虽然在宣告函式时有指定参数的数量(像上例为两个参数),但是在呼叫的时候并不会检查有几个引数。也就是说把

sum(3, 4)
// 写成
sum(3, 4, 5, 6, 7)
// 或是
sum()

都是可以的,但是没有指定的部分都会变成 undefind,而多传入的参数在多数情况下没有意义。

arguments 物件

实际上函式被呼叫的时候,会产生一个 arguments 物件,而这个物件是我们呼叫函数时所带入的参数。而拿刚刚举的例子

sum(3, 4, 5, 6, 7)

多传入的参数,我们可以函式里透过 arguments 这个物件来取得。因为有五个参数会先印出 5,然後回传 a+b 也就是 3+4 等於 7 的结果。

const sum = function (a, b) {
  console.log(arguments.length); // 5
  return a + b;
};
sum(3, 4, 5, 6, 7); // 7

arguments 虽然看起来像阵列(类阵列),但其实他是带有索引特性的物件,内建 length 属性。有取得参数的方式也能让函式更弹性的运用

Note: 「类阵列 (Array-like)」 的意思是 arguments 一样拥有 length 这项属性,以及从 0 开始的索引,但是它没有阵列内建的方法像是 forEach() ,或是 map() 。 -- MDN-Arguments 物件

例如取索引里其他的值来运算:

// sum 有五个值,分别为 arguments[0] 到 arguments[4]
const sum = function (a, b) {
  return a + arguments[4]; // 索引从 0 开始
};
sum(3, 4, 5, 6, 7); // 10,3 + 7 = 10

或者用在回圈:

const sum = function () {
  let num = 0;
  for (var i = 0; i < arguments.length; i++) {
    num += arguments[i];
  }
  return num;
};
sum(3, 4, 5); // 12

另外 arguments 物件还有一个属性,当我们想在函式内呼叫函式本身,可以透过 arguments.callee(),这在匿名函式里特别有用。MDN-arguments.callee

const sum = function (a, b) {
  console.log(arguments.callee === sum);
  return a + b;
};
sum(3, 4, 5, 6); // true

这里列举几个用法,有许多种可以参考 MDN-Arguments 物件
而要注意的是「严格模式」不能用 arguments.callee 和 arguments.caller 以及在箭头函式无法使用 arguments 物件。

参考资料

008天重新认识JavaScript
MDN-Arguments 物件
MDN-arguments.callee


<<:  Day 19 - 作业系统攻击 - Linux

>>:  Day 19 Knative Serving DNS 测试

26.MYSQL 统整资料

在SQL中其实不只可以将我们需要的资料从大量资料库中找出,还可以先整理,统整过後再输出 这也是非常实...

Day15 - this&Object Prototypes Ch3 Objects - Iteration 开头

搭配 in 的 for 回圈会搜寻物件中所有 property 为 enumerable 者 而使...

C# 入门之处理用户的输入

在很多情况下,我们的程序,通过命令终端与用户交互。让用户输入,yes 或 no 是一种很常见的场景。...

[访谈] APCS x 特殊选才 Andy Chen

在接下来的铁人文中会陆续访问来自不同接触过 APCS 的人。除了准备过 APCS 的同学外,期望也可...

Day23 AR隐形眼镜 实现前的最後几哩路 是坎坷的天堂路还是一路顺风的云霄飞车呢?

上期介绍了Mojo Lens(AR隐形眼镜)的一些功能,了解到了他的特别之处,但除了这些特点之外,他...