2011-01-26 24 views
16

私はしばしばのような表情を見ている:私はそれを解釈するにはどうすればよいjavascript関数と(function(){...}());

(function() { 
    var x = 1; 
    ... 
}()); 

?構文的には、これだけで無名関数の定義です。

function() { 
... 
} 

それ以降()は何ですか?なぜそれを封筒に入れるのですか?それはすぐに関数式に変換された後に呼び出されていることを除いて

おかげ

+0

@delnan:あなたはそうだけど、それは検索するのが少し難しい質問の1つだと思う。私は、人が* "javascriptでこの構文は何ですか?"と検索すると、いくつかの答えに出くわすでしょう。 :o) – user113716

+2

@delnan - あなたは間違ったウェブサイトにいるかもしれないと思います。これはスタックオーバーフローで、人々が助けに来ます。あなたは失われていますか?おそらくあなたはおそらく間違ったウェブサイトにいるのでしょうか? – jmort253

+0

@delnan、私はこの質問も学んでいると思うが、あなたが好きなレベルではない、または適切であると思う。私はそれを検索しようとしましたが、答えを得ていませんでした。そのために、私は@patrickに感謝して私に答えてくれたことに感謝します。 – Oliver

答えて

24

全く同じ、。

var myfunc = function() { 
     var x = 1; 
     ... 
    }; 
    myfunc(); 

または(類似の)本:

var returnValue = function() { 
     var x = 1; 
     ... 
    }(); 

は、名前を取り除くの周りに括弧を移動して、あなたは彼らが「見ることができますがした場合と同じ

// v-----first set of parentheses makes the function an expression 
    (function() { 
     var x = 1; 
     ... 
    }()); 
// ^-----this set is used to invoke the function 

それほど違いない。

+0

うーん、興味深い。私は表現と機能の正確な意味をより深く掘り下げて考える必要があると思います。 – Oliver

+1

@Oliver:関数式と宣言の間には微妙ではあるが重要な違いがあります。 [ここには本当に素晴らしい記事があります](http://kangax.github.com/nfe/)jsの機能 – user113716

+0

記事のおかげで、良い読書。答えは受け入れました。 – Oliver

2

私が最も頻繁に役に立つと思うところは、コールバック関数です。この記法は、コールバック関数に変数を含める必要がある場合にも使用できますが、変数の状態が関数の外で行われることによる影響を受けないようにする必要があります。

var someVal = 1; 

setTimeout((function(one) { 
     return function() { 
      alert(one); // alerts a 1 even 10 seconds after someVal++; 
     } 
})(someVal), 10000); 

someVal++; // the value in the setTimeout will remain the same as it is locked inside. 

ここで、setTimeoutは引数をとらない関数をとります。したがって、その関数に値を渡す方法の問題は、0引数を取る関数を返す1つの引数を取る関数を作成することによって解決されます。

私はFirebug JavaScriptコンソールでこの表記法の能力についてもっと学びたいと思っている方にお勧めします。このコンセプトの周りを頭で囲むと、この強力なコンセプトが使用できる領域が見え始めます。

+0

「IT」とは何ですか?それがとても暑いなら、確かに名前が必要です。 –

+0

私はあなたが探している用語は "閉鎖"だと思います。閉鎖には他にもいくつかの用途がありますが、その多くはまだ探検する機会がありませんでした。 – jmort253

+0

それは私が思ったことです。しかし、いくつかのクイック検索は一見無関係の情報をたくさん引っ張りました..そして 'クロージャー'と 'クロージャー 'の違いは何ですか? –

関連する問題