采用以下代码块。没有返回语句,但 MyApp.VideoTracker 是窗口对象的一个属性,因此可以全局访问。
(function(window, $, VideoTracker, undefined) {
"use strict";
VideoTracker.loadAPI = function(apiReadyCallbackFn) {
};
VideoTracker.destroy = function(iframeElement) {
};
VideoTracker.trackVideos = function() {
};
$().ready(function() {
var youTubeIframes = $('iframe[src*="youtube.com"]');
if (youTubeIframes.length > 0) {
VideoTracker.loadAPI(VideoTracker.trackVideos);
}
});
}(window, jQuery, MyApp.VideoTracker = MyApp.VideoTracker || {}));
这是因为它在函数调用中定义的方式,即:
MyApp.VideoTracker = MyApp.VideoTracker || {}
最好有解释,因为我知道这一定是原因,但不明白为什么?
最佳答案
是的,本质上你是用全局变量调用 IIFE。
假设您已经定义了 MyApp
- 并且在函数主体执行之前 - 您正在使用一个表达式调用它,该表达式要么设置 的
与现有的 VideoTracker
属性>MyAppMyApp.VideoTracker
或一个空的对象文字,并且该引用正在传递到您的 IIFE。
希望对您有所帮助。
关于Javascript IIFE,不明白这个变量是如何变成全局变量的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40842171/