1

これら 2 つの JavaScript モジュールの違いを誰かが説明できるかどうか疑問に思っていました。私は、とりわけunderscore.jsとjQueryのソースコードを読んでJavaScriptモジュールを設計する方法を学ぼうとしており、これら2つのパターンに気づきました。

例 1

(function() {

    var _this = this;

    _this.VERSION = '0.1';

}).call(this);

例 2

(function(_this) {

    _this.VERSION = '0.1';

}(this));
4

2 に答える 2

1

例 1 ではthis、関数内で変数の値を明示的に設定しています。

例 2 では、関数は の値を気にしませんthis。むしろ、それが機能する引数を期待しています。の値に依存していないとも言えますthis。このパターンの利点は、パラメーターの名前によって、必要なもの ( windowmyObjectContext...) を明確にできることです。

あなたの特定のケースでは、違いはありません。しかし、関数に を実際に使用するコードが含まれている場合this、たとえばthis.myObject = {}、はそれぞれの場合で異なる値を持つ可能性があるため、違いが生じる可能性があります。thisしかし、実際には、2 番目のパターンを使用する人はthis、関数内で参照することはありません。

于 2013-03-17T11:23:37.390 に答える
1

call(obj[, arg[, arg[, arg[, ...]]]])objコンテキストで関数を実行し、引数function () {}(obj)を渡して現在のコンテキストで関数を実行objします。この特定の例では、違いはありません。どちらの例でも同じことを行います。一部の人々にとっては、匿名関数をcallorapplyの代わりに実行する方がクリーン()であり、ここではそうだと思います。

2番目の例では、行var _this = _this;は役に立たず、_thisすでにスコープ内で定義されており、その行は既存の変数を同じ値で再定義しています(したがって、間違っています)。

于 2013-03-17T10:42:29.370 に答える