手动调用 IIFE
Manually Invoke IIFE
我有一个库 (Hubspot Odometer),我正在开发的 Web 应用程序中使用它,它可以很好地在页面上创建和 运行 里程表样式的小部件。
问题在于它们是仪表板界面的一部分,该界面具有通过 AJAX 加载的窗格。初始视图未通过 AJAX 加载,因此 JavaScript 执行正常并且里程表正确呈现。
当我加载带有里程表的新窗格时,它们没有正确呈现,也没有按应有的方式运行。这样做的原因是里程表库 运行 作为一个大的 IIFE。
我想知道的是,我可以在通过 AJAX 加载内容后手动重新调用 IIFE,以便正确渲染和绑定里程表吗?
我也在使用 jQuery 如果它给我任何额外的选择。
试试这个:
var funcName = (function funcName() {
// rest of the code
return funcName;
}());
另请参阅此 jsbin。
IIFE 的整体思想是它是一个立即执行的匿名函数。所以根据定义,没有办法重新执行它。
话虽如此,您可以将函数表达式存储到一个全局变量中,然后执行它。例如
window.my_iife = (function() { /* stuff */ });
window.my_iife();
注意语法与传统 IIFE 的细微差别:((function() {})());
通过将函数存储在 window
中,您以后可以从开发人员控制台或代码中的任何其他位置访问它。如果您只是将它存储在 var
中,或将其声明为 function my_iife() { /* ... */ }
某处,您将面临 var
或函数声明本身被包装在 IIFE 中并因此无法访问的风险。例如,如果您在其中声明 var
/function
的文件是 Sprockets 清单的一部分(例如 Rails 中的 application.js
),则可能会发生这种情况。
var funcName = null;
(funcName = function funcName() {
// rest of the code
return funcName;
}());
funcName();
这对我有用
我有一个库 (Hubspot Odometer),我正在开发的 Web 应用程序中使用它,它可以很好地在页面上创建和 运行 里程表样式的小部件。
问题在于它们是仪表板界面的一部分,该界面具有通过 AJAX 加载的窗格。初始视图未通过 AJAX 加载,因此 JavaScript 执行正常并且里程表正确呈现。
当我加载带有里程表的新窗格时,它们没有正确呈现,也没有按应有的方式运行。这样做的原因是里程表库 运行 作为一个大的 IIFE。
我想知道的是,我可以在通过 AJAX 加载内容后手动重新调用 IIFE,以便正确渲染和绑定里程表吗?
我也在使用 jQuery 如果它给我任何额外的选择。
试试这个:
var funcName = (function funcName() {
// rest of the code
return funcName;
}());
另请参阅此 jsbin。
IIFE 的整体思想是它是一个立即执行的匿名函数。所以根据定义,没有办法重新执行它。
话虽如此,您可以将函数表达式存储到一个全局变量中,然后执行它。例如
window.my_iife = (function() { /* stuff */ });
window.my_iife();
注意语法与传统 IIFE 的细微差别:((function() {})());
通过将函数存储在 window
中,您以后可以从开发人员控制台或代码中的任何其他位置访问它。如果您只是将它存储在 var
中,或将其声明为 function my_iife() { /* ... */ }
某处,您将面临 var
或函数声明本身被包装在 IIFE 中并因此无法访问的风险。例如,如果您在其中声明 var
/function
的文件是 Sprockets 清单的一部分(例如 Rails 中的 application.js
),则可能会发生这种情况。
var funcName = null;
(funcName = function funcName() {
// rest of the code
return funcName;
}());
funcName();
这对我有用