【问题标题】:difference on behavior when running javascript code with function and IIFE使用函数和 IIFE 运行 javascript 代码时的行为差异
【发布时间】:2020-01-31 07:06:59
【问题描述】:

让我们假设我有一个包含以下场景的 index.js 文件。该文件被导入到 index.html 文件中,它将触发该文件中的内容。我可以期望以下 sn-ps 表现不同或表现相同吗?我看到了相同的结果,但不妨问一下:)

场景 1

(() => {
  navigator.serviceWorker.register("sw.js").then(() => {
    console.log('sw registered');
  });
})();

扫描仪 2

registerServiceWorker();

function registerServiceWorker() {
   navigator.serviceWorker.register("sw.js").then(() => {
        console.log('sw registered');
   });
}

场景 3

navigator.serviceWorker.register("sw.js").then(() => {
    console.log('sw registered');
});

【问题讨论】:

  • #2中的函数留在内存中,可以重复使用,其他情况不可重复使用。
  • 所以对于我来说,你所看到的实际上就是我在 index.js 中的所有内容,我不会在文件中添加任何其他内容。所以我想我做哪种场景并不重要@Teemu
  • 我会使用 #3,IIFEs 没有添加任何内容。
  • 是的,唯一的区别是,#2 使用更多内存,脚本在卸载之前不会从文档中删除。如果这是文件中的所有代码,我看不出有任何理由使用结构 #1 或 #2。
  • @Teemu 随意将其作为答案

标签: javascript iife


【解决方案1】:

当然 - 它们的行为会相同。您可能会出于各种原因选择其中一种,这可能取决于代码的上下文以及您期望代码如何发展。例如,如果可能需要重用该函数,那么您将选择命名函数方法。不过,我看不出 (1) 的丑陋冗长有什么意义。

【讨论】:

  • 这个文件不会有更多的代码,我也不需要重用这个函数。我考虑过使用第一个并将代码更改为使用 async/await。想法?我认为这是我唯一一次看到第一个有意义的使用
  • 也许是想多了。三是简洁明了。无需以另一种方式重写它。但我们处于个人喜好的领域。
猜你喜欢
  • 2014-12-15
  • 2022-11-12
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
相关资源
最近更新 更多