采取以下代码块。没有return语句,但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 || {}
解释会很棒,因为我可以看出这一定是原因,但不明白为什么?
答案 0 :(得分:2)
是的,基本上你用全局变量调用IIFE。
假设您已经定义了MyApp
- 并且在执行函数体之前 - 您使用一个表达式调用它,该表达式将VideoTracker
属性设置为MyApp
MyApp.VideoTracker
或空对象文字,并且该引用正在传递到您的IIFE。
希望有所帮助。
答案 1 :(得分:0)
那是因为您的 MyApp 已经是一个全局对象 - 由于您的自我调用功能,它不会成为一个对象。