手动调用IIFE

时间:2015-08-26 11:59:08

标签: javascript function iife

我正在使用我正在开发的网络应用程序中使用的库(Hubspot Odometer),它可以在页面上创建和运行里程表样式小部件。

问题是它们是仪表板界面的一部分,它具有通过AJAX加载的窗格。初始视图不是通过AJAX加载的,因此JavaScript执行正常并且里程表正确呈现。

当我加载带有里程表的新窗格时,它们没有正确渲染,也没有按照应有的方式运行。原因是里程表库作为一个大的IIFE运行。

我想知道的是,在通过AJAX加载内容后,我可以手动重新调用IIFE,以便正确显示里程表并将其绑定吗?

我也在使用jQuery,如果它为我提供了任何其他选项。

2 个答案:

答案 0 :(得分:2)

试试这个:

var funcName = (function funcName() {
  // rest of the code
  return funcName;
}());

另见jsbin

答案 1 :(得分:2)

IIFE的整个想法是它的一个匿名函数立即执行。所以根据定义,没有办法重新执行它。

然而,尽管如此,您可以将函数表达式存储到全局变量中,然后执行它。例如

window.my_iife = (function() { /* stuff */ });
window.my_iife();

请注意与传统IIFE相比语法略有不同:((function() {})());

通过将函数存储在window中,您可以稍后从开发人员控制台或代码中的任何其他位置访问该函数。如果您只是将其存储在var中,或在某个地方将其声明为function my_iife() { /* ... */ },则可能会导致var或函数声明本身被包裹在IIFE中,从而无法访问。例如,如果您声明var / function in的文件是Sprockets清单(例如Rails中的application.js)的一部分,则可能会出现这种情况。