0

JavaScript で次のようなコードをよく見かけます。

func1: function() {
      return array1.pop();
    }

上記と次のような違いは何ですか。

function func1 (){
         return array1.pop();
}

上の二つは書き方が違うだけで同じものですか?最初のものは、私には switch ステートメントのように見えます。この質問が単純すぎる場合は申し訳ありませんが、これが構文の問題である場合、JavaScript の本では最初の構文を使用することはめったにありません。StackOverflow でこの質問をする主な理由です。

4

3 に答える 3

2

1 つ目は、オブジェクト リテラルのプロパティを作成することです。プロパティ名はfunc1で、プロパティ値は無名関数です。例えば:

var someObject = {
    someProp: function () { 
        alert('foo'); 
    }
};

someObject.someProp(); // alerts "foo"

2 つ目は、おそらく という意味function func1 ...でした。これは、単純な古い関数宣言です。例えば:

function someFunction() {
    alert('foo');
}

someFunction(); // alerts "foo"

ほとんどの人は、他の言語の名前空間と同様に、論理機能をグループ化する方法としてオブジェクト リテラルを使用します。関数を他の変数のプロパティとして定義することにより、グローバル名前空間内の変数の数を抑え、コードをより整理します。

于 2013-08-13T12:34:52.187 に答える
1

「関数巻き上げ」と呼ばれる非常に重要な違いもあります (ECMA に関してはあいまいですが、動作を説明する一般的な用語です)。これは、元の質問の「第 2 の方法」、つまり -

function func1 (){
         return array1.pop();
}

関数を使用する方法は 2 つあります (2 番目の方法についても同様です)。

  1. 関数式として -

    var a = 関数() {

    }

  2. 関数宣言として

    関数 a() {

    }

ご存知のように、すべての変数は、関数本体のどこで宣言されていても、舞台裏で関数の先頭に持ち上げられます。関数は変数に割り当てられた単なるオブジェクトであるため、関数にも同じことが当てはまります。唯一の「落とし穴」は、関数宣言を使用すると、関数の宣言だけでなく、関数の定義も巻き上げられることです。

于 2013-08-13T13:01:15.827 に答える
1

2 番目の形式は、「通常の」関数宣言の形式です。関数は、宣言したスコープ内で使用できます。最初の形式は、オブジェクト リテラル内で使用されます。

var myObject = {
    func: function() {
        return array1.pop();
    },
    name: 'John Smith'
};

この関数は、myObject.func()いつでもmyObjectアクセス可能として呼び出すことができます。このスコープの違いは別として、関数の 2 つの定義は同等です。

于 2013-08-13T12:37:18.057 に答える