JS函数作为变量[getEventListeners API]工作

时间:2015-10-28 10:17:35

标签: javascript function

我有两个类似的功能,但是一个有效,另一个没有

function notWorking(el) {
    return getEventListeners(el);
}
notWorking(document);
// result --> Uncaught ReferenceError: getEventListeners is not defined

working = function(el) {
    return getEventListeners(el);
}
working(document);
// result --> Object {keyup: Array[1], …}

为什么getEventListeners在第二个函数内工作而不在第一个函数内?

1 个答案:

答案 0 :(得分:7)

首先对所有这些问题的评论,getEventListeners不是自定义方法,它是浏览器提供的控制台api。

getEventListeners(object)

  

getEventListeners(object)返回注册的事件侦听器   指定的对象。

我执行了您在问题中提供的代码。它只能在 Firefox 中正常工作,请检查附加的快照

Firefox firebug

我在 Chrome 浏览器中执行了相同操作 Chrome devtools

但这不是预期的。由于它是有效并且Firefox正在做得正确,因此应该在chrome中使用相同的功能。我检查了var functionName = function() {} vs function functionName() {}和所有其他资源中的所有答案。它解释了函数声明和函数表达式的范围/可见性。但是这里问题是getEventListeners函数的可见性而不是函数工作或函数工作。

所以我认为这在Chrome中必定是缺陷,或者getEventListerners方法不应该在脚本中使用,它仅用于Command Line API Reference中指定的调试目的。

  

注意:此API仅在控制台本身内可用。您   无法从页面上的脚本访问命令行API。

更多信息

getEventListeners.toString()
> "function getEventListeners(node) { [Command Line API] }"

this.getEventListeners
> undefined          //function is not accessible via window object

// where as

this.setTimeout
> setTimeout() { [native code] }