JavaScript - nubie,window.onlaod 和 IIFE

JavaScript - nubie, window.onlaod and IIFE

我这里有一个笨蛋 - https://plnkr.co/edit/RZTF9uda8Cw2YQx8Gs1Y?p=preview

它是按钮上的一个简单事件

使用 window.onload 可以,但不能使用 IIFE。

我认为 IIFE 创建后会 运行 所以这不是像 window 加载后那样吗?

    // (function(){

    //   var btn = document.getElementById('btn1');

    //   btn.addEventListener('click', function(){
    //     alert('Hi');
    //   })

    // })();


    window.onload = function(){

      var btn = document.getElementById('btn2');

      btn.addEventListener('click', function(){
        alert('Hi');
      })

    };

I thought the IIFE would run once its created

当然可以。 (已经有点在名字里了……)

so is that not like once the window has loaded?

这就是问题

您的脚本资源嵌入在头部,这意味着在执行时,您尝试通过其 ID select 的 HTML 元素尚不存在。

因此您要么需要在元素存在(window加载、DOMContentReady)之后执行此操作,要么在相关的HTML之后嵌入外部脚本资源 ] 元素。 (无论如何,将脚本放在正文末尾是一般的性能建议。)