質問

あの人気閉鎖のスタイルです。最初の呼びかけ 匿名のコンストラクタ:

new function() { 
  var code...
}

インライン実行機能:

(function() {
  var code...
})();

あの違い行動をと。は"より良い"のですか?

役に立ちましたか?

解決

場の機能の違いは何の返却値の型に"byte[]"を指定発現するのか、価値の"本"の内部の機能です。

基本的に挙動

new expression

が効果的に相当

var tempObject = {};
var result = expression.call(tempObject);
if (result is not an object)
    result = tempObject;

もちろんtempObjectおよび結果は一過性の値できずにい実施内容の通訳はありませんJS機構なのではないオブジェクト"チェック。

広義的に言えば、"新function(){..}"の方法でも遅くなることにより、新しいこのオブジェクトのコンストラクタです。

とはいえなくてはなりません、本当の差としてオブジェクト割り当てはまりません、なんかをコード温コードによるコストの作成関数オブジェクトと関連する閉鎖).

編集:一つのことを実感していることだったので買ってきたからこの tempObjectexpressions-試作例前の expression.call) tempObject.__proto__ = expression.prototype

他のヒント

@ントランス:最初のもの。と比較してみることを、名前付きコンストラクタ:

function Blah() {
    alert('blah');
}
new Bla();

これは実際にも実行中のコードです。でも同じようなことがありますの匿名のコンストラクタ...

実際はそうではありませんか-)

その両方を閉鎖を行うと、コードブロックです。とならないからとニコ動から必ん。第二の理由

ではないかもしれないよ眺めは最初のコードが実際に実行するの線 のように見え であ の作成 新しい機能は実行でのコンストラクタが、それだけではありませんどのようなことが現実に起こっている.避けるコードがないとうまっ!

もの (function(){ ... })(); 良くでbookendトークンにできるだけ、入退場の閉鎖ます。これは良いのでアラートをプログラマを持っていないことの範囲の変更がなければならないときに便利でやっている一部のpostprocessingファイルの例を用minification.

でも、ページのようになります:

<html>
<body>
<script type="text/javascript">
var a = new function() { 
  alert("method 1");

  return "test";
};

var b = (function() {
  alert("method 2");

  return "test";
})();

alert(a);  //a is a function
alert(b);  //b is a string containing "test"

</script>
</body>
</html>

意外にもってくるからで警告の両方の方法"1"と"2"の方法".とは予想していなかった"方法1"と警告される.の差額はその値のa、bです。たに機能自体がフランクフルトの文字列の数を返します。

次の例ではの機能を作ることにしました。

編集:このようになっています。

り違いがあります。

両方の匿名の機能を全く同じです。でも、二つの違いは第二の範囲の変数が制限され、匿名の機能そのものです。がありません偶然の追加変数のグローバルです。

これを利用する方法はありませんclutteringのグローバル変数の範囲であるとしてこれらのグローバル変数値を妨害するおそれがあるその他のグローバル変数使用その他の図書館で使用されていを第三者に図書館があります。

例:

<html>
<body>
<script type="text/javascript">

new function() { 
a = "Hello";
alert(a + " Inside Function");
};

alert(a + " Outside Function");

(function() { 
var b = "World";
alert(b + " Inside Function");
})();

alert(b + " Outside Function");
</script>
</body>
</html>

上記のコードの出力のようなもの:

こんにちは内機能
こんにちは外機能
世界中の機能

...その後、エラーは'b'で定義されていない外部の機能!

このように、この方法はより良い...安心!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top