繁体   English   中英

从另一个Javascript文件调用IIFE

[英]Call IIFE From Another Javascript File

我有一个文件bg.js其内容只是一个IIFE。 我想从另一个文件中的另一个函数加载这个文件/调用函数。 既然IIFE是匿名的(它是,对吗?)我不能通过名字来称呼它。 看来我必须加载整个文件,以便立即执行。

我已经完成了搜索并找到了很多关于IIFE是什么的教程和文档,但我没有看到如何从另一个范围执行一个。

如何从另一个javascript文件调用/加载一个IIFE的javascript文件?

更多信息 IIFE加载在我页面的页脚中。 单击链接进行导航时,不会执行页眉和页脚脚本。 页脚中的IIFE负责设置背景图像,所以我需要在perPageBindings()执行该函数

我认为我需要做的是从正在perPageBindings()执行的正文中的另一个函数调用IIFE

编辑清晰我正在考虑两个选项:

  1. 只需将脚本标记从页脚移动到正文; 要么
  2. 给IIFE一个名称,使其不再是匿名的,然后从其他地方调用该命名函数

如果2是一个可行的选项,那么我想我将创建一个关于将IIFE转换为命名函数的新问题。

如果要访问该脚本,函数或属性中的某些内容,在匿名调用之后,您需要将该函数的某些内部暴露给可从全局范围访问的内容。

我并不是说您必须让您的函数将变量放入全局范围,尽管这是许多库所做的,并且是UMDCommonJSAMD环境不可用时遵循的路径之一。

您应该查看Revealing Module Pattern以获得更好的视角。

请考虑以下代码段:

(function(global){
    /*
     * This variable will stay "private" 
     * because it is scoped to the IIF
     */
    var someProp = "Hello World";

    /*
     * This property is effectively exposed 
     * because it is accessible through 
     * myLib.foxtrot below
     */
    var someOtherProp = "Hello to you too";

    var myLib = {
        foo: "bar",
        fiz: true,
        buzz: 1,
        foxtrot: someOtherProp
    };

    /*
     * myLib is now accessible through the 
     * global that we passed to the IIF below
     * at the point of calling with "window"
     */
    global.myLib = myLib;

}(window));

看起来你想要将这个功能定义在一些可以重复使用的地方。 如果要从页脚中调用,请在IIFE中调用可重用函数调用。 这样它会立即在页脚中调用并调用您的函数,但您也可以在其他地方调用此函数。

例:

JS:

function setBackground () {
    // sets background and can be called whenever
}

HTML:

<footer>
    <script>
        (function () {
            setBackground();
        } ());
    <script>
</footer>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM