2010-12-04 3 views
2

私はこの構文を何度も見ましたが、私はそれを正しくGoogleに方法を見つけることができませんでした、私はここにいくつかの助けを得ることを願って:小さな疑問

<script> 
    (function(){ 
     //code goes here 
    })(); 
    </script> 

機能キーワードはに包まれているのはなぜかっこ?それは何をし、これは何と呼ばれていますか? JSで

答えて

5

、構文:

function() { //code } 

は、匿名関数を定義します。あなたは変数にこれを保存し、それを呼び出すことができます。

var a = function() { //code }; 
a(); 

をしたり、それを割り当てる気にしたくない場合は、ワンステップでそれを行うことができます。

function() { //code }(); 

が適切な構文ではありません。ので、

(function() { //code })(); 

カッコが必要です。

この構文は、メモリ管理と変数名の変更に役立つ特定の状況で便利です。例えばjavascriptの場合、jQueryオブジェクトがありますが、ほとんどの人はそれを$と呼んでいます。しかし、時には$がjQueryオブジェクトの代わりに他の変数として使用されます。

(function($) { // code that uses $ })(jQuery); 

あなたはそれが実際にjQueryオブジェクトを指し示すかかどうかを心配する必要はドル記号を使用することができず、その方法をこの問題を解決するには、中にあなたのコードをラップすることができます。

+0

グローバルスコープで変数が漏れないようにクロージャを作成しています。 – Lekensteyn

+0

@Bob、詳細な説明をいただきありがとうございます。もう1つだけですので、関数内のコードは変数に代入されていないと即座に実行されますか? –

+0

@Nik:後で(それに '()'を追加することによって)それを呼び出す場合にのみ。 – thejh

5

すぐに呼び出されている匿名関数と呼ばれます。

// defining and calling a named function 
function x() { /* do something */ } 
x(); 

// defining an anonymous function (usually to assign it to a variable) 
var x = function() { /* do something */ }; 
x(); 

// defining and calling an anonymous function in one step 
(function() { /* do something */ })(); 

ほとんどの場合、最後のパターンはクロージャの作成の一部として使用されます。

+0

Tomalakありがとう、それは同じように良い答えです。 –

1

Bob Fincheimersがその意味を説明するための答えを参照してください。

プログラマーが外部から見えたくない関数と変数の束をラップするのに使用されます。ライブラリーなどを使用しているときに便利です。多くの関数をブロックしたくない内部のものの名前。