var ninja = (function(){
function Ninja(){};
return new Ninja();
})();
上記の機能がかっこでカプセル化されているのはなぜですか。最後に();
が表示されるのはなぜですか?次のJavaScriptステートメントを説明しますか?
最終的には();
のためにコンストラクタ関数だと思いますが、なぜオブジェクトがカッコで囲まれていますか?
var ninja = (function(){
function Ninja(){};
return new Ninja();
})();
上記の機能がかっこでカプセル化されているのはなぜですか。最後に();
が表示されるのはなぜですか?次のJavaScriptステートメントを説明しますか?
最終的には();
のためにコンストラクタ関数だと思いますが、なぜオブジェクトがカッコで囲まれていますか?
このコードは同等です:
function Ninja() {
// nothing here
}
var ninja = new Ninja();
上記のコードでは、関数/オブジェクト忍者はグローバルスコープではありません。
コード(function() {...})();
は、基本的に「ここに含まれている機能をすべて取り、すぐに実行する」と言います。だから、それは無名関数を作成し、それを直後に呼び出すことです。
なぜSとも理由である が「();」「(」にカプセル化された関数宣言。最後に
その宣言と同時に、機能を実行
あなたは表示されることがあります。Named function expressions demystified - by Juriy "kangax" Zaytsev
Immediately-Invoked Function Expression(またはIIFE)と呼ばれています。新しいスコープを作成し、内容をすぐに実行します。それには多くの用途があります。私が最も利用しているのは、this
キーワードが意味を変えるときです。
var someClass = function() {
this.property = something;
this.update = (function(obj) {
function() {
$('.el').each(function() {
$(this).html(obj.property);
});
};
)(this);
};
に私はその範囲内で意味$('.el').each()
、this
変更内this.property
を参照したいしながら.each()
にループスルーされている現在のDOM要素を指します。ですから、をパラメータとしてIIFEに渡し(そしてそのパラメータをobj
と呼んで)、obj.property
を使用して、$('.el').each(..., function() { ... });
の範囲外にあるときは、this.property
を参照することができます。
それが理にかなっているか示唆したように何かご質問:)
を持っている場合なら、私に教えてください:幸いBenalman
に参照のうえ、直ちに、呼び出される関数の式(生命維持) 、でSyntaxError「修正」がありますシンプル。パーサに関数式を期待するために最も広く受け入れられている方法は、括弧で囲むことです.JavaScriptでは、括弧には文を入れることができないためです。この時点で、パーサーはfunctionキーワードを検出すると、それを関数宣言ではなく関数式として解析します。
// //関数の実行コンテキストを利用して //関数の式を即座に呼び出して//「プライバシー」を作成するために、次の2つのパターンを使用できます。「
私は読書をお勧めし(関数(){/ *コード* /}は()); //クロックフォードが推奨これ
(関数(){/ *コード* /})(); //しかしこれは、同じようにうまく機能
、http://benalman.com/news/2010/11/immediately-invoked-function-expression/ –
も参照してください:[JavaScriptで無名関数をどのように仕事?](http://stackoverflow.com/questions/1140089/how-does-an-anonymous-function-in-javascript-work)。 –
@KevinDeVoeあなたの複製はより良いです – Dave