这两个版本的函数有什么不同?
What is the difference between the two versions of functions
有人能解释一下这两个代码块的区别吗?既然第二种更简洁,为什么我们还需要第一种呢?
首先var Utility;
(function (Utility) {
var Func = (function () {
function Func(param1, param2) {
var self = this;
this.Owner = param2;
}
return Func;
})();
Utility.Func = Func;
})(Utility || (Utility = {}));
第二:var Utility;
(function (Utility) {
Utility.Func = function (param1, param2) {
var self = this;
this.Owner = param2;
}
})(Utility || (Utility = {}));
上下文:第一个版本是由typescript编译器生成的代码,我试图理解为什么它生成第一个而不是更简单的第二个。
代码块之间的唯一区别是,第一个代码块在创建Func
函数的代码周围有一个函数作用域。这样做的唯一原因是创建一个作用域,可以在其中声明在外部作用域中不可用的变量:
var Utility;
(function (Utility) {
var Func = (function () {
var x; // a variable in the inner scope
function Func(param1, param2) {
var self = this;
this.Owner = param2;
}
return Func;
})();
// the variable x is not reachable from code here
Utility.Func = Func;
})(Utility || (Utility = {}));
从我看到的它们是相同的,在这两种情况下,你都在定义函数并使其成为实用程序的成员,调用它。再加上,没有范围差异,没有背景差异,没有真正的差异。我认为这只是个人喜好的问题。
但是,我可以看到一个潜在的差异,如果非常内部的一个是async
函数调用,可能会有差异,因为Utility.Func
最终将undefined
作为一个值,这是第一个非常大的问题,但我怀疑写它的人不会注意到。
相关文章:
- 基于窗口宽度jquery的函数的替代方法是什么
- 如果在构造函数中有“返回”,则在 JavaScript 中的新运算符中做了什么
- 未捕获的类型错误:topFrame.window.changeSelectedBarStyle不是函数,原因是什么
- 什么'这是从第三个函数上的async 1st函数获得结果的更好方法
- 在递归生成器函数中,yield后面的*(星号/星号)语法意味着什么
- 在什么情况下需要同时使用compile&链接函数的角度
- 当一个重要的构造函数参数丢失时应该发生什么
- 当绑定到AngularJS中的函数时,会在后台发生什么
- 缓存!saveLocations()和addLocation()函数有什么区别
- 函数(i,val)在javascript中是什么意思
- 鉴于 for..在构造中,库提供的函数(如 jQuery.map() 或 _.each())有什么用
- 如果 JS 中的函数是一流的,那么在定义它们之前允许调用它们是什么
- undercore.js_.tap()函数什么是方法链
- 淘汰抛出消息:类型错误:
不是一个函数.什么意思 - JavaScript 函数什么是范围以及为什么使用 $
- jQueryAJAX函数什么都没做
- 用".then"链接bluebird中的异步函数.什么是最好的方法
- 为什么这个函数什么也不返回?
- 将参数传递给函数.什么'It’他错了
- 我有节点JS错误的日期函数什么地方出了问题