为什么将带括号的函数传递给 '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
返回的任何内容。
在我的 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
返回的任何内容。