窗口对象上具有全局变量的包装函数
Wrapped function with global variable on window object
我找不到以下代码的具体问题,但你能告诉我为什么我们调用以下代码,以及它如何/何时执行吗
(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
。
- 如何使用图表包装函数有条件地格式化谷歌可视化表单元格
- 从原型更改/包装函数
- 我正在尝试使用 html 元素包装函数的返回值
- 将 ajax .done 作用域扩展到包装函数
- 在javascript中需要帮助包装函数并正确处理“this”
- 包装函数后无法读取属性
- 检查是否调用了包装函数
- 从生成器函数中包装co和co-mysql,并从包装函数中让步
- 窗口对象上具有全局变量的包装函数
- 使用removeEventListener删除包装函数回调
- 用JavaScript正确包装函数
- 如何从包装函数返回javascript ajax调用的结果
- 如何包装函数调用,有时做异步调用,使其行为同步
- 为什么UnderscoreJS有很多原生Javascript函数的包装函数?
- Knockout - keyCode属性没有通过包装函数传递
- Highcharts包装函数'
- 中间javascript: ajax请求的包装函数稍后执行主函数
- 是否有一种聪明的方法来访问包装函数中的变量
- Jquery新手在包装函数时遇到问题
- express 4的异步包装函数没有't捕获错误