我有以下功能
function hello() {
alert("hi!");
}
下面是这段代码:
var elem = document.getElementById("btn");
elem.onclick = hello;
我的问题可能有点难以理解,所以请原谅我:这段代码与普通调用的确切区别是什么,或者是什么使这段代码需要引用函数变量而不是常规调用? (hello();
)
我如何知道应该在哪里给函数一个引用,以及应该在什么时候真正调用它?
好吧,onclick
属性需要一个对函数的引用,以便在单击元素时执行。 通常是:
element.onclick = funcRef;
或
element.onclick = function () {
funcRef();
};
(当然,最好使用AddEventListener
和AttachEvent
)
请注意,它们都是对函数的引用,而不是调用。
当某事需要一个引用时,你不调用它。。。你给它分配一个引用(第一个例子)。
当您想要专门调用一个函数时,您可以使用()
调用它(第二个示例)。 但是请注意,在第二个示例中,仍然有一个对分配给onclick
的函数的引用--它只是一个匿名函数。
可能更重要的部分是:
有些人认为你想这样做:
element.onclick = funcRef();
但它会立即执行函数(因为()
),并将其返回值赋给onclick
。 除非返回值是函数,否则这不是您想要的。
我认为这个故事的寓意是,当你现在想要/需要执行一些东西时,你调用函数。 如果该函数需要以后使用或需要存储,则不要调用它。
你想让它现在执行吗? 那就叫它。
a=hello()
表示“尽快调用hello()
,并将其返回值设置为a
”。
另一方面,a=hello
意味着“a
是hello
的别名。如果您调用a()
,您将得到与调用hello()
相同的结果。”
您将后者用于回调等,其中您希望在事件发生后告诉浏览器您希望发生什么。 例如,您可能想说“当用户单击时调用hello()
”(如示例中所示)。 或者,“当AJAX查询返回结果时,对返回的数据调用callback()
函数”。
我如何知道应该在哪里给函数一个引用,以及应该在什么时候真正调用它?
现在需要运行函数吗?
而不是添加()来执行它
您是否需要引用函数以便稍后调用它?
不要添加()。