我应该使用IIFE或窗口onload来初始化吗?

GMa*_*lla 6 javascript javascript-events iife

以下两个代码段均有效:

在js文件中使用IIFE:

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

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

}());
Run Code Online (Sandbox Code Playgroud)

在html文件中调用window加载事件的initialize():

window.addEventListener('load', initialize, false);
Run Code Online (Sandbox Code Playgroud)

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

and*_*toi 8

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

(function initialize() {
    // do somthing
}());
Run Code Online (Sandbox Code Playgroud)

要么

// do somthing
Run Code Online (Sandbox Code Playgroud)

将在同一时间点执行.

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

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

需要注意的是在现实中,与像属性asyncdefer<script>S,这是比较复杂的.这就是为什么有大量的资源加载器可用.