窗口对象上具有全局变量的包装函数

Wrapped function with global variable on window object

本文关键字:包装 函数 全局变量 对象 窗口      更新时间:2023-09-26

我找不到以下代码的具体问题,但你能告诉我为什么我们调用以下代码,以及它如何/何时执行吗

    (function (myApp) {
            var helperFunction = function() {
                //helper function body
         };
         myApp.Helper = helperFunction; 
     }(window.MyApp));

在上述代码中1) myApp和window之间的区别是什么。MyApp?2) 为什么我们通过了myApp,它真的是从任何地方通过的吗?

你能告诉我我们为什么叫下面的吗?它是如何/何时到达的吗执行?

代码中的外部结构称为立即调用函数表达式(IIFE)。它实际上只是一个同时定义和调用的函数定义,而不给它一个名称。它会立即执行。

(function(someArg) {
   // body of function
}(something));

基本上是这样的:

function myFunc(someArg) {
   // body of function
}
myFunc(something);

IIFE的工作原理与上面的代码相同,只是IIFE没有为函数分配名称,因此在该范围内不使用名称。

在IIFE中,您将window.MyApp传递给您的函数,该函数可能是一个对象。在该函数的定义中,传递给该函数的变量的名称为myApp。因此,在该函数中引用myApp的任何地方,它本质上都是window.MyApp的别名,因为它们都指向同一个对象,其中的任何更改都是对同一对象的更改。

你的代码本质上是这样的:

function myFunc(myApp) {
    var helperFunction = function() {
            //helper function body
    };
    myApp.Helper = helperFunction; 
 }
 myFunc(window.MyApp);

myApp和window之间的区别是什么。MyApp?

没有区别。它们都指向同一个对象。

为什么我们通过了myApp,它真的是从任何地方通过的吗?

传递它是一种风格或设计选择。它不必传递。如果需要,它可以在函数中的任何地方引用为window.MyApp,但这样,就有一个快捷方式可以在函数内部使用它作为myApp

它被称为一个自调用函数。我不确定确切的语法:)

回答您的问题:

myApp和window之间的区别是什么。MyApp?

myApp是函数参数。window.myApp是传递到函数中的内容。

为什么我们通过了myApp,它真的是从任何地方通过的吗?

看到上面的答案-希望它能澄清发生了什么。

基本上,代码相当于说:

function myFunction(myApp) {
    var helperFunction = function() {};
    myApp.Helper = helperFunction;
}
myFunction(window.MyApp);

只是它更简洁,实际上没有声明函数myFunction