我有两个类似的功能,但一个有效,而另一个不起作用

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在第二个函数内而不在第一个函数内工作?

最佳答案

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

getEventListeners(object)


  getEventListeners(object)返回在以下位置注册的事件侦听器
  指定的对象。


我执行了您在问题中提供的代码。它在Firefox中运行正常,请检查随附的快照

javascript - JS函数作为变量[getEventListeners API]-LMLPHP

我在Chrome浏览器中执行了相同的操作
javascript - JS函数作为变量[getEventListeners API]-LMLPHP

但这是无法预期的。由于它是有效的,而且Firefox也在做正确的事,因此应该在chrome中也应如此。我检查了var functionName = function() {} vs function functionName() {}中的所有答案以及所有其他资源。它说明了函数声明和函数表达式的范围/可见性。但是这里的问题是getEventListeners函数的可见性而不是function-working或function-notWorking。

因此,我认为这一定是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] }

关于javascript - JS函数作为变量[getEventListeners API],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33388336/

10-10 09:11