Javascript IIFE,不明白这个变量是如何变成全局变量的

Javascript IIFE, don't understand how this variable becomes global

采用以下代码块。没有 return 语句,但 MyApp.VideoTracker 是 window 对象上的 属性,因此可以全局访问。

 (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 属性 或 MyApp 与现有的 MyApp.VideoTracker 或空对象文字,并且该引用正在传递到您的 IIFE。

希望对您有所帮助。

那是因为您的 MyApp 已经是一个全局对象 - 由于您的自调用函数,它不会成为一个对象。

  • 您认为您还可以通过什么方式访问它的 VideoTracker 属性 或在它不存在时定义它?
  • MyApp 对象不作为执行 IIFE 的更高上下文的一部分存在的情况下,它应该上升 引用错误! 因为 MyApp 对象 既未定义,也未在给定的 IIFE 上下文中创建。