は、なぜ我々は暴露のモジュールのパターンで自己実行機能を使用していますか?機能は、新しいスコープを導入するために使用されているので、
JavaScriptは、ファーストクラスの機能を持っており、ブロック・スコープを欠いています。
は、以下のシナリオで何が...ソーシャルメディア機能()、すなわち、埋め込み機能 内の関数initをラップするために、その可能にする、それは我々がただの自己へのプロパティ値を割り当てることができる不思議ではありませんコードブロックを実行していますか?
JavaScriptでは、関数は、()
およびnew
演算子に応答するオブジェクトに過ぎません。
他のオブジェクトと同様に、定義したり、変数やプロパティに格納して後で使用することができます。
自己実行機能は、これはJavaScriptに固有のものではありませんJS
で非常にユニークな構造であるように見えます。 first class functionsは、例えば、この特性を持っているすべての言語:
- のLisp、
- をOCamlで、
- スカラ座、
- ゴー、
(代表者を経由して)
- のC#、
- C(経由fn ptrs)、
- Python、
- Perl(via
&
)、
- ルビー、最近の言語発達に
- Luaの
は、ファーストクラスの機能は標準ではなく、ルールです。型システムの構文にはオーバーヘッドがなく、varianceの問題がないため、静的に型指定されていない言語を使用すると簡単です。
Javaでも、Lambdas slated for Java 8でバンドワゴンにジャンプしている可能性があります。
他の多くの言語では、すぐに呼び出される関数はそれほど役に立ちません。他のほとんどの言語はblock-scopedなので、変数を別々にしたい場合は、ブロック{...}
を使用します。ただし、JavaScriptではvar
がfunction
またはProgramを含む最小のスコープになりますので、function
は新しいスコープを導入する最も簡単な方法です。
Rubyは、ブロックと関数の区別がほとんどないため、この点でJSと同様に考えることができます。
と全く同等だとして例は_、役に立たない_「それは我々だけで自己実行するコードブロックにプロパティ値を割り当てることができる不思議ではない」 - 私はそれが奇妙だとは思わない:あなたのことができプロパティを_any_式に代入するのはなぜですか?なぜ関数呼び出しの結果にならないのですか? (値を返さない関数呼び出しでさえ、効果的に未定義を返すので機能します) – nnnnnn