浏览器扩展开发中 background.js 不适合使用全局变量?

文档中 https://developer.chrome.com/docs/extensions/develop/concepts... 提到 background.js 中不适合使用全局变量,因为当 background 失活后全局变量会丢失。但是我试了一下在事件回调中读取全局变量

let person = {a: 2}
chrome.action.onClicked.addListener(async () => {
  console.log(person)
});

当 service worker 失活后,再次激活,对应的全局变量并不会丢失,而且激活时并不会重新执行 background.js。我猜测是因为事件的回调使用闭包把全局变量的数据保存在作用域链中,这样回调函数恢复时对应的数据并不会丢失,依然可以使用。是这样的吗?

阅读 973
1 个回答

background.js 为避免长期占用用户内存,会不定期被释放,所以官方不建议依赖 background 存储长期变量,解决方案

  1. 使用 storage 存储
  2. 有一些 hack 手段(自行搜索)可以使 background 长期保活
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏