javascript - 从另一个 Javascript 文件调用 IIFE

标签 javascript jquery iife

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

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

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

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

中执行该函数

我认为我需要做的是从主体中的另一个函数调用 IIFE,该函数正在 perPageBindings()

中执行

为清晰起见进行编辑 我正在考虑两种选择:

  1. 只需将脚本标签从页​​脚移动到正文;或
  2. 给 IIFE 一个名字,这样它就不再是匿名的,然后从别处调用那个命名的函数

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

最佳答案

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

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

你应该查看 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));

关于javascript - 从另一个 Javascript 文件调用 IIFE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33041584/

相关文章:

javascript - 在 JS 中使用 IIFE 通过创建私有(private)变量来保护数据

javascript - 这个 IIFE switch 语句是否会导致不必要的开销?

javascript - 无法使用 Jquery 获取、修改和设置 Span 文本

javascript - ajax成功后jQuery继续循环执行

jquery - 即使滚动条可见,也使绝对 div 高度为 100%

jquery - 如何在单击时替换 h3 标签中的文本而不更改其中的其他内容?

javascript - 如何使用 extjs 将我自己的消息添加到 Firefox 状态栏?

java - Java SHA1 与 JavaScript SHA1 的不同

javascript - 单个 DIV 内有 2 个 onClick 事件

javascript - IIFE方法泄漏?