我有一个 bg.js
文件,它的内容只是一个 IIFE。我想加载这个文件/从另一个文件中的另一个函数调用函数。由于 IIFE 是匿名的(是的,对吗?)我不能用名字来调用它。看来我必须加载整个文件才能立即执行。
我已经完成搜索并找到了许多关于什么是 IIFE 的教程和文档,但我没有看到如何从另一个范围执行它们。
如何从另一个 javascript 文件调用/加载属于 IIFE 的 javascript 文件?
更多信息
IIFE 加载在我页面的页脚中。当我单击链接进行导航时,不会执行页眉和页脚脚本。页脚中的 IIFE 负责设置背景图像,因此我需要在我的 perPageBindings()
我认为我需要做的是从主体中的另一个函数调用 IIFE,该函数正在 perPageBindings()
为清晰起见进行编辑 我正在考虑两种选择:
- 只需将脚本标签从页脚移动到正文;或
- 给 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/