我刚刚学习前端,然后我想出了一种使用 IIFE 创建模块并将其注册到命名空间的方法。从下面的代码来看,我仍然不明白一些事情:
为什么函数需要一个窗口作为参数?
这个变量声明是什么意思:
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 中将全局变量传递到 IIFE 的常见模式。同样,当在
window
可能不存在的环境中运行时。
这个变量声明是什么意思:var App = window.App || { };
如果
window.App
存在,则将其分配给App
,否则将App
初始化为空对象{}
。
为什么最下面一行有一个声明:window.App = 应用程序
它将
App
(local) 分配给 window.App
(global)。确保对函数内部 App
所做的修改保留在全局范围内(而不是在函数中)。