1

我想知道是否有人可以解释这两个 JavaScript 模块之间的区别。我一直在尝试通过阅读一些 underscore.js 和 jQuery 源代码等来学习如何设计 javascript 模块,并注意到这两种模式。

示例 1

(function() {

    var _this = this;

    _this.VERSION = '0.1';

}).call(this);

示例 2

(function(_this) {

    _this.VERSION = '0.1';

}(this));
4

2 回答 2

1

call(obj[, arg[, arg[, arg[, ...]]]])obj上下文中function () {}(obj)运行函数,将在当前上下文中运行函数并传入obj参数。在这个特定的例子中没有区别 - 两个例子都会做同样的事情。对于某些人来说,使用callorapply而不是 just运行匿名函数会更干净(),我认为就是这种情况。

在第二个示例中, with 行var _this = _this;是无用的,_this已在范围内定义,并且该行正在重新定义具有相同值的现有变量(因此它甚至不正确)。

于 2013-03-17T10:42:29.370 回答
1

示例 1 显式设置this函数内变量的值。

在示例 2 中,该函数不关心 的值this。它宁愿期待一个它可以使用的论点。您也可以说它不依赖于 的值this。这种模式的一个优点是通过参数的名称可以清楚地表明您想要什么(windowmyObjectContext...)。

在您的具体情况下,它没有任何区别。但是,如果该函数包含实际使用 的代码this,例如this.myObject = {},它可能会有所不同,因为this在每种情况下可能具有不同的值。但说实话,使用第二种模式的人永远不会this在函数中引用。

于 2013-03-17T11:23:37.390 回答