frr*_*lod 24 javascript reference function call
我有以下功能
function hello() {
alert("hi!");
}
Run Code Online (Sandbox Code Playgroud)
拿这段代码:
var elem = document.getElementById("btn");
elem.onclick = hello;
Run Code Online (Sandbox Code Playgroud)
我的问题可能有点难以理解,所以请耐心看看:这段代码与普通调用有什么区别,或者是什么使得这段代码需要引用函数变量而不是常规调用?(hello();
)
我怎么知道我应该在哪里提供函数的引用,以及什么时候我应该实际调用它?
Ian*_*Ian 31
好吧,该onclick
属性需要一个函数的引用,以便在单击该元素时执行.通常它是:
element.onclick = funcRef;
Run Code Online (Sandbox Code Playgroud)
要么
element.onclick = function () {
funcRef();
};
Run Code Online (Sandbox Code Playgroud)
(但当然,最好使用addEventListener
和attachEvent
)
注意它们是如何引用函数而不是调用.
当某些东西需要引用时,你不要调用它...你给它一个引用(第一个例子).
如果要专门调用某个函数,可以使用()
(第二个示例)调用它.但请注意,在第二个示例中,仍然存在对分配给的函数的引用onclick
- 它只是一个匿名函数.
可能更重要的部分:
有些人认为你想这样做:
element.onclick = funcRef();
Run Code Online (Sandbox Code Playgroud)
但是立即执行该函数(因为()
),并将其返回值赋值给onclick
.除非返回值是函数,否则这不是您想要的.
我认为这个故事的寓意是,当你想要/现在需要执行某些东西时,你可以调用该函数.如果需要该功能以供以后使用或需要存储,则不要调用它.
Man*_*rth 18
你想要它现在执行吗?然后打电话给它.
a=hello()
表示" hello()
尽快调用,并将其返回值设置为a
".
另一方面,a=hello
意思是" a
是别名hello
.如果你打电话a()
,你会得到与调用相同的结果hello()
"
您将后者用于回调等,您希望告诉浏览器在事件发生后您想要发生什么.例如,您可能想说" hello()
用户点击时调用"(如示例中所示).或者,"当AJAX查询返回结果时,callback()
在返回的数据上调用函数".