function Add(a, b) { }
如果我们调用一个 javascript 函数,例如 - onclick="Add(1)"
为什么即使我们只传递一个参数甚至超过 2 个参数(在上面的例子中)我们也没有得到错误?Java 脚本如何处理上述场景?
function Add(a, b) { }
如果我们调用一个 javascript 函数,例如 - onclick="Add(1)"
为什么即使我们只传递一个参数甚至超过 2 个参数(在上面的例子中)我们也没有得到错误?Java 脚本如何处理上述场景?
Javascript 是一种动态的弱类型语言。因此,它没有严格执行方法签名。
Add
是一个函数对象。它有一个名为的属性arguments
,它是一个类似数组的对象,其中包含您传入的参数。为方便起见,它还将创建名为的局部变量a
,b
并将第一个和第二个元素分配arguments
给它们。在您只有一个输入参数的情况下,b
将是未定义的。
所以,Javascript 会处理
Add(1)
和
Add(1, undefined)
几乎相同。这里的区别在于arguments
变量的长度为 2 而不是 1。不过,从纯粹实用的角度来看,它们几乎是相同的。
这是因为Javascript中的提升概念。在实际执行您的 Javascript 代码之前,解析器会运行您的代码并识别您创建函数的位置以及创建变量的位置。在您的代码开始由 Javascript 引擎逐行执行之前,Javascript 引擎已经在内存中为代码中编写的变量和函数留出了空间。因此,在代码执行开始之前,所有变量和函数都已在内存中可用。因此,我们将以有限的方式访问它们。
当 Javascript 引擎在您的代码中找到一个函数时,它会设置一个内存空间并将整个函数定义放入其中。
但是,当它在您的代码中找到一个变量时,它会设置一个内存空间;给它变量的名称并设置一个占位符,即“未定义”作为它的值(而不是实际分配的值)。
请查看下面的链接以更好地了解正在发生的事情 - https://developer.mozilla.org/en-US/docs/Glossary/Hoisting