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

标签 javascript iife

采用以下代码块。没有返回语句,但 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 属性>MyApp 与现有的 MyApp.VideoTracker 或一个空的对象文字,并且该引用正在传递到您的 IIFE。

希望对您有所帮助。

关于Javascript IIFE,不明白这个变量是如何变成全局变量的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40842171/

相关文章:

javascript - 使用 IIFE 时抛出 “` TypeError `: ` [0,1] ` is not a function”

javascript - 使用ajax运行php脚本没有显示结果

javascript - 自动执行匿名 JavaScript 函数的括号位置?

swift - Swift 语言中的 IIFE

javascript - 意外行为 : Javascript, setTimeout() 和 IIFE

javascript - 立即调用页面默认值的函数表达式

javascript - 使用 Spectrum Color Picker 设置 freedrawcolor

javascript - 如何从默认主页重定向到索引页?

javascript - Ajax 数据不会 $_POST 到 php 页面

javascript - CSS/Javascript 鼠标悬停弹出框