[回归基础]JavaScript 函数中的参数:Parameters(形参) 和 Arguments(实参)

[回归基础]JavaScript 函数中的参数:Parameters(形参) 和 Arguments(实参)

Parameters(形参) 和 Arguments(实参) 一样吗?

更多精彩内容请看 web前端中文站
www.lisa33xiaoq.net 可按Ctrl + D 进行收藏

Javascript是一种函数式语言,这意味着函数是主要的执行模块单元。显然,JavaScript中的函数非常重要。当讨论函数时,术语 parameters(形式参数,简称形参) 和 arguments(实际参数,简称实参) 通常可以混用,就好像它们是一样的,但其实有一个非常微妙的区别。

  • Parameters(形参) 是函数定义时的形式参数,作为函数定义的一部分,是列出类的变量。
  • Arguments(实参) 是函数调用时的实际参数,是在函数被调用时传递给该函数的变量值。

我们为什么要为这个微小的差异而烦恼呢?

首先,如果函数调用期间传递的 arguments(实参) 数量和函数定义中列出的 parameters(形参) 数量不同,JavaScript 不会抛出错误。我们应该清楚的是, parameters(形参) 和 arguments(实参) 应该被视为两个不同的实体来对待。

 // 带有3个parameters(形参)的基本函数,打印所有参数的和 
 function argCheck(paramter1, parameter2, parameter3){   
 console.log(parameter1 + parameter2 + parameter3); }  
 // 多 1 个 arguments(实参) 调用 (web前端中文站www.lisa33xiaoq.net)
 argCheck(1,2,3,4); 
 // 打印 6 (1 + 2 + 3, 忽略 4)  
 // 少 1 个 arguments(实参) 调用 
 argCheck(1,2); 
 // 打印 NaN ,因为默认情况下,如果缺少相应的 arguments(实参) ,那么它将被设置为 undefined 。 
 // parameter3 被分配为 undefined ,所以 1+2+undefined = NaN  
 // 特别注意,这里不会抛出错误

在上面的代码片段中,函数 argCheck 根据其函数定义获取三个参数。在第7行中,我们使用 1 个额外的 arguments(实参) 调用函数,代码执行时没有抛出任何错误。类似地,在第11行中,我们用比 parameters(形参) 少一个的 arguments(实参) 调用函数,它仍然不会引发任何错误。希望这已经使你确信,arguments(实参) 和 parameters(形参) 还有更多的内容,本文将讨论 JavaScript 在上下文环境中提供的一些特性。

基本上,当提供多余 arguments(实参) 时,它们不会被分配给任何 parameters(形参)。有一些方法可以访问这些多余的分配,我们将会在后面稍微的讲一下。另一方面,如果我们的 parameters(形参) 比 arguments(实参) 多,没有相应 arguments(实参) 的 parameters(形参) 将被设置为 undefined 。让我们逐个探究一下与 arguments(实参) 和 parameters(形参) 相关的一些 JS 特性。

arguments 形参

不,这不是打字错误。 arguments 形参基本上是传递给函数的所有参数的集合。该参数隐式地传递,就像 this 形参一样。arguments 形参是一个类似数组的构造,即使没有显式定义的 parameters(形参) ,它也可以用于访问传递给函数的 arguments(实参)。

 function argumentVar(parameter1, parameter2, parameter3){   
 console.log(arguments.length); 
 // 打印传递的 arguments(实参) 数量。   
 console.log(arguments[3]); 
 // 打印第4个 arguments(实参) 。遵循数组索引计数  }  
 argumentVar(1,2,3,4,5); 
 // 顺序打印结果 // 5 // 4  // 5 是 arguments(实参) 的数量 // 4 是第 4 个 arguments(实参)

请参阅上面使用 arguments 形参的代码片段。 arguments.length 表示 arguments(实参) 的确切数量,这并不取决于函数定义中 parameters(形参) 的数量。可以使用类似于数组的索引计数来访问各个参数。

arguments 对象的一个有趣的特性是它在非严格模式下将函数 parameters(形参) 设为别名。 这意味着更改 arguments[0] 会更改 parameter1

Rest Parameters(剩余形参)

Rest 剩余形参是 ES6 添加到 JavaScript 的一个新特性。函数定义时,在最后一个形参前添加省略号(…)前缀。

function restParam(...restArgs){   
 console.log(restArgs.length); 
 // 打印传递的 arguments(实参) 数量。   
 console.log(restArgs[3]); 
 // 打印第4个 arguments(实参) }  
 restParam(1,2,3,4,5); 
 // 顺序打印结果 // 5 // 4  // 5 是 arguments(实参) 的数量 // 4 是第 4 个 arguments(实参)

在上面的代码片段中,…restArgs 创建一个数组 restArgs ,它会在这个数组中保存传递给函数的所有 arguments(实参) 。Rest Parameters (剩余形参) 必须是最后一个 parameters(形参) ,否则会引发语法错误:Syntax error : parameter after rest parameter

arguments 对象和 rest parameters (剩余形参)之间有两个主要区别:

  • Rest Parameters(剩余形参) 是一个真正的数组,可以应用 forEachsort 等数组方法。尽管 arguments 对象有 length 方法,但它不是一个真正的数组,不能使用 sort 这样的数组方法。
  • Rest Parameters(剩余形参) 只包含没有相应形参的实参,而 arguments 对象包含传递给函数的所有参数。 代码段 #3 也可以写成如下形式:
 function restParam(parameter1, ...restArgs){   
 console.log(restArgs.length); 
 // 打印没有相应 Parameters(形参)的 Arguments(实参)数量   
 console.log(restArgs[2]); 
 // 打印没有相应 Parameters(形参)的第三个 Arguments(实参) }  
 restParam(1,2,3,4,5); 
 // 顺序打印结果 // 4 // 4  // 4 是没有相应 Parameters(形参)的 Arguments(实参)数量 
 // 4 没有相应 Parameters(形参)的第三个 Arguments(实参)值

希望本文有助于你了解有关 Arguments(实参) 和 Parameters(形参) 的一些信息,以及为什么要区分两者的重要性。如果您有任何问题或希望我详细说明,请留言。

【注:本文源自网络文章资源,由站长整理发布】

0
如无特殊说明,文章均为原作者原创,转载请注明出处

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论

Hi,请填写昵称和邮箱!

取消评论
代码 贴图 加粗 链接 删除线 签到