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

时间:2015-11-25 06:23:29

标签: javascript

我无法找到以下代码的具体问题,但您能否告诉我为什么要调用以下内容以及如何/何时执行

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

在上面的代码中 1)myApp和window.MyApp有什么区别? 2)为什么我们通过了myApp,它实际上是从哪里传来的?

2 个答案:

答案 0 :(得分:2)

  

你能告诉我为什么我们打电话给以下以及如何/何时获得   执行?

代码中的外部结构称为立即调用函数快速(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

答案 1 :(得分:0)

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

回答你的问题:

  

myApp和window.MyApp有什么区别?

myApp是函数参数。 window.myApp是传递给函数的东西。

  

为什么我们通过了myApp,它实际上是从哪里传来的?

请参阅上述答案 - 希望它能澄清正在发生的事情。

基本上,代码相当于说:

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

除了它更简洁并且实际上没有声明函数myFunction