为什么 JavaScript 不将缺少函数参数视为错误?

问题描述 投票:0回答:2
function Add(a, b) {
  /* … */
}

如果我们像

Add(1)
那样调用这个 JavaScript 函数,为什么即使我们只向函数传递了错误数量的参数,也没有得到错误? JavaScript 如何处理上述场景?

javascript function parameters signature
2个回答
4
投票

Javascript 是一种动态的弱类型语言。因此,它并没有严格执行方法签名。

Add
是一个 Function 对象。它有一个名为
arguments
的属性,它是一个类似数组的对象,其中包含您传入的参数。为了方便起见,它还将创建名为
a
b
的局部变量,并分配第一个和第二个元素
arguments
对他们来说。如果您只有一个输入参数,
b
将是未定义的。

所以,Javascript 会处理

 Add(1)

 Add(1, undefined)

几乎相同。这里的区别在于

arguments
变量的长度为 2 而不是 1。不过,从纯粹实用的角度来看,它们非常相同。


0
投票

这是因为Javascript中的Hoisting的概念。在实际执行 Javascript 代码之前,解析器会运行您的代码,并识别您在何处创建了函数以及在何处创建了变量。在 Javascript 引擎开始逐行执行代码之前,Javascript 引擎已经在内存中为代码中编写的变量和函数预留了空间。因此,在代码执行开始之前,所有变量和函数都已在内存中可用。因此,我们将以有限的方式访问它们。

当 Javascript 引擎在代码中找到函数时,它会设置一个内存空间并将整个函数定义放入其中。

但是,当它在代码中找到变量时,它会设置一个内存空间;给它变量的名称并设置一个占位符,即“未定义”作为其值(而不是实际分配的值)。

请查看下面的链接,以便更好地了解正在发生的事情 - https://developer.mozilla.org/en-US/docs/Glossary/Hoisting

© www.soinside.com 2019 - 2024. All rights reserved.