Javascript JS函数缺少参数,是否仍然有效?

Javascript JS函数缺少参数,是否仍然有效?,javascript,function,parameters,scope,arguments,Javascript,Function,Parameters,Scope,Arguments,我一直在为何时接收/传递参数给JavaScript函数的想法而挣扎,阅读本文有助于我明确我的问题。以下是文章中的代码: <input type="text" placeholder="Type something here, then click outside of the field." size="50"> <p id="log"></p> let input=document.querySelector('input'); 让log=docum

我一直在为何时接收/传递参数给JavaScript函数的想法而挣扎,阅读本文有助于我明确我的问题。以下是文章中的代码:

<input type="text" placeholder="Type something here, then click outside of the field." size="50">
<p id="log"></p>

let input=document.querySelector('input');
让log=document.getElementById('log');
input.onchange=handleChange//
上面的语句表明,当输入发生更改事件时,我们正在定义一个函数。如果我们添加了paranthesis,那么它将调用我们不想要的函数

这是为事件分配处理程序的一种方法。处理程序在实际事件发生时执行


希望它能有所帮助。

onchange
属性通常将函数作为值(在这种情况下,当某些内容发生更改时调用的函数)。因此,“正常”形式是:

input.onchange = function (e) { .... };

代码中的表示法完全相同,只是因为您将handleChange作为一个单独的函数,所以它可以重用。

在所讨论的行中,您将一个方法指定为处理程序(字面上,将输入对象的属性设置为方法引用)。您没有调用该方法。浏览器随后负责创建
事件
对象,并在每次检测到发生适当的
onChange
事件时将其传递给
handleChange


这是告诉朋友比萨饼店的电话号码和你的朋友在五个不同的时间点不同比萨饼之间的区别。

By
input.onchange=handleChange
您只是告诉程序,只要输入发生更改,就应该调用
handleChange
函数。您不需要指定参数

所有事件都在内部处理。每当触发事件时,
EventObject
自动传递给函数

考虑下面使用setInterval和一个带一个参数的函数的示例

//下面的函数与handleChange()类似
功能测试(num){
console.log(num);
}
常量对象={}//它就像“输入”元素对象
object.func=测试//这就像设置input.onchange=handleChange一样
//这是一个函数示例,该函数计算或创建事件对象,然后将其传递给定义的函数
函数callFuncoObject(){
让valueCalculated=Math.floor(Math.random()*100)
试验(计算值);
}

setInterval(callFuncoObject,1000)
我明白了。如果handleChange没有括号,它是如何接收事件参数的?它在附加到它的函数上有括号,您在分配
handleChange
时没有括号,因为如果您添加括号,它将在该点执行函数。明白了!这与Jasdeep所写的内容有关。这肯定澄清了问题。对,这很有意义“你没有调用那个方法”。我也很欣赏这个比喻。我想我需要研究一下“方法引用”,因为你把我弄丢了。javascript是一种开明的语言,在这种语言中,你可以指定、引用和传递函数,就像你可以使用字符串和数字等基本值一样简单。第一部分讲得通。然后您写道,“所有事件都在内部处理”。这是否意味着事件是全局对象?我刚刚比较了Window和Event的MDN文档,它们都是接口。我记得读到过这样一篇文章:Window是一个全局对象,所以根据这两个概念,我推断这两个都是全局对象,这就是为什么
handleChange()
可以访问它。@DaniAmsalem每当发生事件时,系统都会基于该事件创建一个新的事件对象
EventObject
不是传递给每个事件的单个或静态对象,而是在不同事件上创建的对象。感谢您的澄清!既然你没有在全局方面反驳我,我猜我在每个事件都是全局对象这一点上是正确的。我现在意识到我所困惑的是:函数引用和侦听器之间的区别。例如,事件处理程序采用函数引用,该引用是函数名或函数表达式。事件处理程序的示例包括onclick和onchange。然而,事件侦听器接受一个侦听器,该侦听器是实现该事件的对象或函数。事件侦听器应用于事件类型,如滚动、单击、向下键和鼠标指针。
input.onchange = handleChange;
input.onchange = function (e) { .... };