1

私はJSONにコメントを追加することを検討していましたが、JSONを有効にする処理の前にコメントを取り除くこのスクリプトを見つけました。JSON.minify()関数を使用可能にするためにどのように機能するかを理解しようとしていますか?

それでは始まります

(function(global){ ...

完全に私には奇妙です。MDNで「グローバルはRegExpオブジェクトではなく、RegExpインスタンスのプロパティである」ことがわかりましたが、このスクリプトでどのように機能するかはわかりません。

4

2 に答える 2

2

このスニペット:

(function(global){
   // your code here
   // referring to the variable named "global" in this scope 
   // will be a reference to the default javascript global object
})(this);

globalは、この自己実行関数内にあるすべてのコードに対してラベル付けされた引数にグローバルオブジェクト(それが何であれ)を割り当てるための構造です。

自己実行関数は、別の実行スコープを定義するために使用されます。これにより、この他のスコープ内で定義した関数または変数が、このスコープの外部から干渉したり、直接アクセスしたりすることはありません(スコープを他のコードスコープから分離します)。

ブラウザでは、グローバルオブジェクトがオブジェクトですが、グローバルオブジェクトがwindow機能しない可能性がある他のJavaScript環境(サーバー上にnode.jsがないなど)で機能する可能性のあるコードを作成する場合はwindow、これが抽出の方法です。デフォルト値からグローバル値を取得し、thisそれを別の変数に入れて、コードブロック内の任意の場所で参照できるようにします。

コードがブラウザでのみ実行されることを意味する場合、これは実際には意味がありません。windowグローバルオブジェクトが必要なときに参照できます。

于 2012-04-25T22:19:20.757 に答える
2

これは単なる関数パラメーター名です。そうかもしれませんfroozboggles

このコード:

(function(foo) {
    // In here, what's called "bar" in the outer scope is called "foo"
})(bar);

1 つのパラメーターを受け取る無名関数を定義し、最初のパラメーターとして のbar値を使用してすぐに呼び出します。bar

jfriend00 が彼の優れた回答で言及していることとは別に、変数と関数を外部スコープに漏らさないようにする良い方法でもあります。たとえば、var baz = 17;javascript の最上位スコープで宣言すると、それはプロパティになります。のwindow。言及したパターンのように関数でラップする場合、プロパティを明示的にエクスポートすることしかできませんwindow-例の場合、プロパティをに割り当てることによってglobal編集: @ josh3736 が彼のコメントで述べているようにwindow、前の宣言なしで割り当てることによってにリークすることもできますquux = 4711;

于 2012-04-25T22:20:52.893 に答える