2015-10-09 124 views
2

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

我已经完成了搜索,发现了许多关于IIFE是什么的教程和文档,但是我没有见过如何从另一个范围执行一个。

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

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

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

编辑为清楚起见 有我正在考虑两个方案:

  1. 脚本标签干脆转移到从页脚身体;或
  2. 给这个IIFE命名,那么它不再是匿名的,然后调用名为函数从其他地方

如果2是一个可行的选择,那么我想我会创造约转换和IIFE到一个新的问题命名函数。

+0

请让我知道如果我要发布一个代码示例。 –

+2

您可以使用'$ .getScript'来全局加载js文件并执行它。 –

+7

根据定义,立即调用IIFE - 能够“从另一个文件调用它”是没有意义的。 – Jamiec

回答

2

好像你想要定义这个功能,使它可以重用。如果要从页脚调用,请在IIFE中包装可重用的函数调用。这种方式立即在页脚中调用并调用你的函数,但你也可以在别处调用这个函数。

例子:

JS:

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

HTML:

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

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

我不是说,你必须有你的函数把一个变量放到全球范围内,尽管这是很多图书馆做,是UMD如下如果CommonJSAMD环境是不可用的路径之一。

您应该看看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)); 
相关问题