首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript自动函数执行

Javascript自动函数执行
EN

Stack Overflow用户
提问于 2016-07-07 11:10:39
回答 6查看 159关注 0票数 3

如果以这种方式编写事件,则应在下列情况下执行操作:

代码语言:javascript
运行
复制
 document.getElementById('myElem').onmousedown = (e) => {
     console.log('fired!')
    }

但是,如果我用另一种方式编写相同的内容,则在加载页面时执行操作一次:

代码语言:javascript
运行
复制
let HandleEvent = (event) => {
 console.log('fired!')
}
document.getElementById('myElem').onmousedown = HandleEvent(event)

UPD:当然只是一个例子,HandleEvent函数将有更复杂的逻辑。

我的问题是:

  1. 为什么?
  2. 如何使它正常工作?
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-07-07 11:15:45

代码语言:javascript
运行
复制
document.getElementById('myElem').onmousedown = HandleEvent;

会做您想做的事情;在分配处理程序时不应该执行它。您应该只分配函数引用。

然后,您也可以将它指定为onload处理程序,甚至可以自己调用它(如果您不依赖于事件对象)

票数 6
EN

Stack Overflow用户

发布于 2016-07-07 11:13:33

代码语言:javascript
运行
复制
document.getElementById('myElem').onmousedown = HandleEvent;

要传递其他参数,可以使用bind:

代码语言:javascript
运行
复制
document.getElementById('myElem').onmousedown = HandleEvent.bind(null, argument1, argument2);

...or您可以使用工厂函数:

代码语言:javascript
运行
复制
document.getElementById('myElem').onmousedown = createHandler();

function createHandler() {
  var a = calculateA();
  var b = calculateA();
  return function handleEvent() {
     //use a and/or b
  };
}

还有其他的方法。精确的代码将取决于您的用例。

票数 5
EN

Stack Overflow用户

发布于 2016-07-07 11:15:57

你不需要event

代码语言:javascript
运行
复制
let HandleEvent = (event) => 'fired!';
document.getElementById('myElem').onmousedown = HandleEvent
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38243984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档