为什么将带括号的函数传递给 'addListener' 会导致它只触发一次?

Why does passing a function with parenthesis to 'addListener' cause it to only fire once?

在我的 chrome 扩展中,我有两个事件侦听器和一个函数 updateTabs:

chrome.tabs.onActivated.addListener(updateTabs());
chrome.tabs.onUpdated.addListener(updateTabs);

function updateTabs() {...}

为什么 onActivated 侦听器只触发一次,而 onUpdated 侦听器按预期工作?

据我了解,updateTabs() 中的括号表示函数在该点被调用。但是,这是否意味着 updateTabs() 仍然会在 onActivated 侦听器被触发时被调用?事件侦听器似乎以某种方式被删除了,我不明白为什么。

onActivated 侦听器仅触发一次。但这不是因为事件。这是因为此时 JS 解释器在读取您的“定义”时 executes/calls 该函数仅将结果附加到侦听器。

第一次调用等同于:

let temp = updateTabs();
chrome.tabs.onActivated.addListener(temp);

这样写的时候,应该清楚的是在添加监听器之前只调用一次函数。当您调用 addListener 时,您并没有提供一个函数供它在 onActivated 事件发生时调用,您传递的是 updateTabs 返回的任何内容。