Javascript 手动调用iLife

Javascript 手动调用iLife,javascript,function,iife,Javascript,Function,Iife,我有一个库,我正在开发一个web应用程序,它可以在页面上创建和运行里程表样式的小部件 问题在于它们是仪表板界面的一部分,仪表板界面上的窗格是通过AJAX加载的。初始视图不是通过AJAX加载的,因此JavaScript执行良好,里程表渲染正确 当我加载一个带有里程表的新窗格时,里程表的渲染不正确,也不能正常工作。原因是里程表库作为一个大生命运行 我想知道的是,在我通过AJAX加载内容之后,我是否可以手动重新调用IIFE,以便里程表能够正确地呈现和绑定 如果jQuery为我提供了任何其他选项,我也在

我有一个库,我正在开发一个web应用程序,它可以在页面上创建和运行里程表样式的小部件

问题在于它们是仪表板界面的一部分,仪表板界面上的窗格是通过AJAX加载的。初始视图不是通过AJAX加载的,因此JavaScript执行良好,里程表渲染正确

当我加载一个带有里程表的新窗格时,里程表的渲染不正确,也不能正常工作。原因是里程表库作为一个大生命运行

我想知道的是,在我通过AJAX加载内容之后,我是否可以手动重新调用IIFE,以便里程表能够正确地呈现和绑定

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

试试这个:

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

还可以看到这一点。

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

尽管如此,您可以将函数表达式存储到全局变量中,并执行它。比如说

window.my_iife = (function() { /* stuff */ });
window.my_iife();
注意,与传统的IIFE相比,语法上略有不同:函数{}


通过将函数存储在窗口中,您可以稍后从开发人员控制台或代码中的任何其他地方访问它。如果您只是将其存储在一个变量中,或者在某个地方将其声明为函数my_iife{/*…*/},那么您就有可能将该变量或函数声明本身包装在一个iife中,从而无法访问。例如,如果您在其中声明var/函数的文件是链轮清单(如Rails中的application.js)的一部分,则可能出现这种情况。

第1行中括号的意义是什么?与函数my_iffe{}my_iffe;,相比,您的方法有什么优势;?主要是个人风格的问题。当使用我的方法时,您可以保证能够从开发人员控制台重新调用函数,而不是在其他关闭中丢失函数。OP确实提到他想手动调用它。括号里什么都不做,它只是分配一个由函数表达式创建的函数。就像我之前说过的,它避免了命名函数声明可能卡在另一个闭包中,无法从开发人员控制台访问或手动调用的问题。例如,如果他的功能是Rails中链轮链的一部分,那么声明本身就有可能被包裹在一个生命中,OPs问题就会出现一个完整的循环。对不起,我第一次错过了可能在其他闭合部分丢失的内容。我的问题的目的不是要启发我,而是鼓励你在你的答案中添加这些信息。