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

    (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

关于javascript - 窗口对象上具有全局变量的包装函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33909751/

10-13 00:31
查看更多