我找不到以下代码的具体问题,但是您能告诉我为什么我们调用以下代码以及如何/何时执行该代码
(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/