自调用函数只能嵌入在html中而不能在外部javascript文件中嵌入?

问题描述 投票:0回答:2

我希望有人可以帮助我。我正在编写一些具有多个自调用函数的代码。如果我将它们嵌入到html页面(参见下面的代码),它们都会有用,但是如果它们(显然减去周围的脚本标签)包含在我的外部javascript文件中而不是......没有快乐,它们不会调用自己。任何线索,如果放在外部文件中可能会出错,以及为什么不调用(以及如何让他们这样做!):

自动调用函数从html页面中删除:

            <script>

            (function () {
                window.addEventListener("load", function() {
                    var d = new Date();
                    var n = d.toLocaleString();
                    var x = function dateDisplay(){
                    document.getElementById("dateDisplay").textContent = n;
                    }
                  x();    
            })
            document.getElementById("dateDisplay").style.color = "red";
            })();
            var add = (function () {
            var counter = 0;
            return function () {return counter += 1;}
             })();

            function closureCount() {
            var hugeNum = Math.random();
            var fixedNum  = (hugeNum * 100) + 1;
            var randomNum= Math.floor(fixedNum);
            document.getElementById("p_r4").innerHTML = add() + " " + randomNum;   
             //code
            }
            </script>
javascript html
2个回答
0
投票

尝试“少即是多”的方法:

  1. 确保<script></script>标签已被删除,并且不在外部js文件中。脚本标记仅在HTML文件中有效。
  2. 在完成之前不要尝试访问DOM元素,就像在窗口加载事件监听器中那样。根据评论,对日期显示元素的第二个引用需要移动。这可以使两个自调用函数看起来像: (function () { window.addEventListener("load", function() { var d = new Date(); var n = d.toLocaleString(); // access document elements after window load document.getElementById("dateDisplay").textContent = n; document.getElementById("dateDisplay").style.color = "red"; }); })(); var add = (function () { var counter = 0; return function () { return counter += 1; } })();

(为了调试目的,将'{'和'}'彼此相互配对,更改为符合您自己的风格。)


0
投票

我知道这是“向前发展的互联网时间尺度”中的一个古老信息......但是自从我在2018年底遇到同样的问题时出现了问题,似乎没有人接受答案 - 或者一个真正起作用的人,我决定写一个评论给2021年发现这个的可怜的家伙,可能无法弄清楚:)

简而言之;如果服务器为文件提供正确的MIME类型,则外部文件中的自执行函数可以正常工作; “text / javascript”(我假设一些用于JavaScript文件的旧MIME类型应该同样有效,但我从未真正尝试过它们)。需要注意的一点是,“text / plain”是肯定不起作用的MIME类型之一 - 根据“file”命令(或类似命令)的输出确定MIME类型的服务器将尝试使用它,除非手动配置。

所以 - 希望这有帮助:)

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.