以下两个代码段均有效:
在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);
是一种比其他更好的方法;在性能方面还是其他方面?就目前而言,我更倾向于将事件侦听器添加到window对象,因为它更具可读性。
最佳答案
这取决于您何时要运行代码。如果您希望代码尽快执行,则可以使用IIFE,但是如果您不使用IIFE来保护变量和/或不污染全局范围,那么使用IIFE毫无意义。
(function initialize() {
// do somthing
}());
要么
// do somthing
将在同一时间执行。
如果您想推迟执行,Web开发人员通常会使用三个时间点。底部是
<script>
,DOMContentLoad和window.onload。从服务器获取后,将执行底部的
<script>
。 DOMContentLoaded
基本上在HTML解析器读取</html>
后立即执行。 window.onload
在所有CSS,<img>
和<script>
已加载后执行。 请注意,实际上,在
async
上具有诸如defer
和<script>
之类的属性,这更加复杂。这就是为什么有大量的资源加载器可用的原因。