为什么我的addEvent函数需要自我调用?

时间:2016-01-05 15:01:10

标签: javascript function alias self-invoking-function

我正在教自己使用javascript编写代码,其中一件令我兴奋的事情是能够创建自定义(更短)版本的addEventListener。

我有以下代码:

var onEvent = function() {
 return function(obj, event, fn) {
   obj.addEventListener(event, fn, false);
 }; 
}();

onEvent(input,"keypress", pressedEnter);

(对于我个人的用法,我更喜欢使用“When”而不是“onEvent”。

经过研究我认为我明白在函数末尾添加()会运行它。但为什么这有必要呢?一旦将函数添加到将被单击的对象中,该函数是否会立即运行?

同样,我创建了一个更短的getElementById:

function grab(id) { 
 return document.getElementById(id); 
}

为什么在使用之前不需要自行运行?我是否误解了结束括号的目的?

谢谢。

2 个答案:

答案 0 :(得分:2)

var onEvent = function(obj, event, fn) {
  obj.addEventListener(event, fn, false);
};

应该完全一样。

答案 1 :(得分:0)

您的外部匿名(无名称)功能用于定义和返回内部函数。

如果您需要在本地环境中执行此操作,这是有意义的。即,如果要定义仅在外部和内部函数中可见但不在外部函数外部的私有变量。或者,您可能希望在外部函数中use "strict"

内部函数的创建是否依赖于上下文也是有意义的。然后,您可能希望根据上下文信息返回不同的函数。