私はCoffeeScriptの最新(1.0)のリリースを使用すると、簡単なJavaScriptの出力は、(デフォルトでは)次のようになります。なぜ「は.call(本)」(のCoffeeScriptで追加)javascript関数のラッパーを使用
(function() {
var a;
a = 1;
}).call(this);
.call(this)とは何ですか?追加する理由は何ですか?
私はCoffeeScriptの最新(1.0)のリリースを使用すると、簡単なJavaScriptの出力は、(デフォルトでは)次のようになります。なぜ「は.call(本)」(のCoffeeScriptで追加)javascript関数のラッパーを使用
(function() {
var a;
a = 1;
}).call(this);
.call(this)とは何ですか?追加する理由は何ですか?
これは関数を作成してから、親関数/オブジェクトスコープで自身を呼び出しています。
.callと.applyは、関数を呼び出すさまざまな方法です。基本的には、独自のスコープ内にa = 1を設定する以外は何もしない関数を作成しました。
JavaScriptでは、すべての関数がオブジェクトであることを認識する必要があります。this
は現在のオブジェクト/関数を参照しています。 .call(this)
を使用すると、関数内のthis
が上書きされ、呼び出しコンテキストのものに置き換えられます。
コンパイルされたCoffeeScriptに変数名のスコープがあることを確認する方法です。これは効率とシンプルさの点で利点があります(生成されたJavaScriptが他のコードで使用されている変数に踏み込まないことがわかります)。 CoffeeScriptコンパイラに対する--bare
(または-b
)オプションを使用して無効にすることができます。
call(this)
理由は、機能が正常に周囲の状況から自分this
オブジェクトを継承していないためだけで、CoffeeScriptのは、それが置かれていますスコープと同じthis
を持っていることを確認することです。
このjsを生成するコードも表示できますか? –
私は、すべての変数にデフォルトでローカル関数(グローバルではない)スコープを持たせ、 'this'を通して親スコープにアクセスできるようにする最も簡単な方法だと考えています。 – miensol
これはJSの名前空間のテーマに関する優れた記事です。 //javascriptweblog.wordpress.com/2010/12/07/namespacing-in-javascript/ –