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