使用 IIFE 将模块添加到命名空间

问题描述 投票:0回答:1

我刚刚学习前端,然后我想出了一种使用 IIFE 创建模块并将其注册到命名空间的方法。从下面的代码来看,我仍然不明白一些事情:

  1. 为什么函数需要一个窗口作为参数?

  2. 这个变量声明是什么意思:

    var App = window.App || { };
    。为什么最后一行有一个声明:
    window.App = App
    。两种声明有什么区别?

(function(window){
    'use strict';
    var App = window.App || {};

    function DataStore(){
        console.log('running the DataStore function');
    }

    App.DataStore = DataStore;
    window.App = App;
}) (window);

我不明白该功能的工作流程,而且我访问的网站也没有提供详细的解释。希望大家能够帮助我,谢谢。

javascript function module frontend web-frontend
1个回答
0
投票

为什么函数需要一个窗口作为参数?

它确保函数在作用域中具有对全局窗口对象的引用(不必使用全局作用域)。

JavaScript 中将全局变量传递到 IIFE 的常见模式。同样,当在

window
可能不存在的环境中运行时。

这个变量声明是什么意思:var App = window.App || { };

如果

window.App
存在,则将其分配给
App
,否则将
App
初始化为空对象
{}

为什么最下面一行有一个声明:window.App = 应用程序

它将

App
(local) 分配给
window.App
(global)。确保对函数内部
App
所做的修改保留在全局范围内(而不是在函数中)。

© www.soinside.com 2019 - 2024. All rights reserved.