我有两个类似的功能,但是一个有效,另一个没有
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在第二个函数内工作而不在第一个函数内?
答案 0 :(得分:7)
首先对所有这些问题的评论,getEventListeners
不是自定义方法,它是浏览器提供的控制台api。
getEventListeners(object)返回注册的事件侦听器 指定的对象。
我执行了您在问题中提供的代码。它只能在 Firefox 中正常工作,请检查附加的快照
但这不是预期的。由于它是有效并且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] }