我无法找到以下代码的具体问题,但您能否告诉我为什么要调用以下内容以及如何/何时执行
(function (myApp) {
var helperFunction = function() {
//helper function body
};
myApp.Helper = helperFunction;
}(window.MyApp));
在上面的代码中 1)myApp和window.MyApp有什么区别? 2)为什么我们通过了myApp,它实际上是从哪里传来的?
答案 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
。