javascript - 我应该使用 IIFE 还是 window onload 来初始化?

标签 javascript dom-events iife

以下两个代码片段都有效:

在js文件中使用IIFE:

(function initialize() {
  txtInput = document.getElementById('txtInput');
  txtResult = document.getElementById('txtResult');

  txtInput.value = "0";
  txtResult.value = "0";

}());

在 html 文件中的窗口加载事件上调用 initialize():

window.addEventListener('load', initialize, false);

是一种比另一种更好的方法吗?在性能方面还是其他方面?就目前而言,我更倾向于向窗口对象添加事件监听器,因为它更具可读性。

最佳答案

这取决于您希望代码何时运行。如果您希望代码尽快执行,您可以使用 IIFE,但如果您不使用 IIFE 来保护您的变量和/或不污染全局范围,那么使用 IIFE 真的毫无意义。

(function initialize() {
    // do somthing
}());

// do somthing

将在同一时间点执行。

如果您想延迟执行,Web 开发人员通常使用三个时间点。 <script> s 在底部,DOMContentLoad 和 window.onload。

  • <script>底部的 s 将在从服务器获取后执行。
  • DOMContentLoaded基本上尽快执行 </html>已被 HTML 解析器读取。
  • 非常简单window.onload在所有 CSS,<img> 之后执行es 和 <script>已加载。

请注意,在现实中,像 async 这样的属性和 defer<script> s,这个比较复杂,。这就是为什么有大量资源加载器可用的原因。

关于javascript - 我应该使用 IIFE 还是 window onload 来初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22537211/

相关文章:

javascript - 在 Forerunner 数据库集合中创建主键时,键属性可以存在于集合对象的对象内部吗?

javascript - Redux Thunk函数后的回调: Uncaught TypeError: Cannot read property 'then' of undefined

javascript - Javascript 中 IIFE 的作用域

javascript - (function() {})() 构造如何工作以及人们为什么使用它?

javascript - 立即调用函数表达式导致错误?

Javascript:函数退出时触发 Action

用于根据提供的值生成选择标签的 Javascript 辅助方法

javascript - Google map 引擎 API - KML 图层阻碍新标记事件

javascript - 带条件的 RxJs mousemove 事件

javascript - JavaScript 的 onunload 事件在 Linux Firefox 中不起作用