3

これらの違いは何ですか?

var person = {
    age: 25,
    name: "David"
};

var person = (function() {
    var name = "David", age = 25;
}());

私の質問は本当に、何をするのかという(function(){}())ことです。

4

3 に答える 3

7

何をし(function(){}())ますか?

これは基本的に無名関数を作成してから実行します。これの一般的な使用法の1つは、グローバル変数を制限することです。

たとえば、次のように3つのグローバル変数(、、、var1およびvar2)がありvar3ます。

var var1 = "a", var2 = "b", var3 = "c";

これらの宣言を無名関数でラップした場合でも、無名関数内でローカル変数としてアクセスできますが、グローバル名前空間を曇らせることはありません。例えば:

(function() {
    var var1 = "a", var2 = "b", var3 = "c";
    console.log(var1); // interact with local variables
})(); // execute function.

これらの違いは何ですか?

var person = {
    age: 25,
    name: "David"
};

このコードが関数に含まれている場合、。という名前のローカル変数が作成されpersonます。それ以外の場合は、という名前のグローバル変数を作成しますperson

var person = (function() {
    var name = "David", age = 25;
}());

このコードは無名関数を作成して実行し、その無名関数の戻りコードを変数に割り当てますperson。無名関数には戻り値がないため、変数personの値はundefined。です。このステートメントは、現在のところvar person;、匿名関数には副作用がなく、戻り値もないため、機能的にはと同等です。

于 2012-08-13T03:13:39.570 に答える
4
var person = (function() {
    var name = "David", age = 25;
}());

関数にはステートメントundefinedがないため、personはになります。return

これは自己実行型の無名関数であり、以下のようにイメージできます。

function foo() {
  var name = "David", age = 25;
}
var person = foo();
于 2012-08-13T03:15:20.393 に答える
2

作成した無名関数を実行します。

この手法は、クラスのメンバーをスコープできるので便利です。

クラスと継承を行うための良い方法を探している場合は、http://ejohn.org/blog/simple-javascript-inheritance/をご覧ください。

また、クラスをAMDモジュールとして定義することをお勧めします。

于 2012-08-13T03:13:18.770 に答える