27

JavaScriptコードスニペットは、ある種の関数宣言の下にありますか?できない場合は、誰かが彼らが何であるかの概要を教えてください。

some_func = function(value) {
    // some code here
}

show:function(value){
   // some code here
}
4

8 に答える 8

72

関数を作成する方法/コンテキストは6つあります。

1)標準の宣言型表記(Cのバックグラウンドを持つ人々に最もよく知られています)

function foo() {}

残りはすべて関数です:

2)オブジェクトリテラルのメソッドとして

var obj = {
    foo: function() {}
};

3)インスタンス化されたオブジェクトのメソッドとして(実行されるたびに作成されますnew

var Obj = function() {
    this.foo = function() {};
};

4)プロトタイプの方法として(new実行回数に関係なく、1回だけ作成)

var Obj = function() {};
Obj.prototype.foo = function() {};

5)参照付きの無名関数として(#1と同じ効果)*

var foo = function() {};

6)すぐに実行される匿名関数として(完全に匿名)

(function() {})();

*このステートメントを見るとき、私は結果を考慮します。そのため、関数への参照がすぐに作成され、匿名ではなくなるため、これらを匿名とは見なしません。しかし、それはほとんどの人にとって同じです。

于 2009-12-08T10:55:43.757 に答える
25

1つ目は、無名関数を作成して変数に割り当てるだけですsome_func。したがって、を使用some_func()すると関数が呼び出されます。

2つ目は、オブジェクト表記の一部である必要があります

var obj = {
  show:function(value){
    // some code here
  }
};

したがって、obj.show()は関数を呼び出します

どちらの場合も、無名関数を作成しています。ただし、最初のケースでは、単に変数に割り当てるだけです。一方、2番目のケースでは、オブジェクトのメンバーとして(おそらく他の多くの中で)それを割り当てています。

于 2009-12-08T10:37:03.880 に答える
4

1つ目は、匿名関数が割り当てられたローカル(またはグローバル)変数です。

var some_name = function(val) {};
some_name(42);

2つ目は、匿名関数が割り当てられたオブジェクト(またはその前にラベルが付いた関数)のプロパティです。

var obj = {
    show: function(val) {},
    // ...
};
obj.show(42);

関数はJavaScriptの第一級市民であるため、変数に割り当てて、変数からそれらの関数を呼び出すことができます。

関数が割り当てられる変数以外の名前で関数を宣言することもできます。たとえば、次の代わりに再帰的メソッドを定義する場合に便利です。

var obj = {
    show: function(val) {
        if (val > 0) { this.show(val-1); }
        print(val);
    }
};

あなたは書くことができます:

var obj = {
    show: function f(val) {
        if (val > 0) { f(val-1); }
        print(val);
    }
};
于 2009-12-08T10:36:31.040 に答える
2

それを行う1つの方法:

var some_func = function(value) {  
    // some code here
}

別の方法:

function some_funct() {
}

さらに別の方法:

var some_object={};
some_object["some_func"] = function() {};

また:

var some_object={};
some_object.some_func = function() {};

言い換えれば、それらはJSで関数を宣言する多くの方法です。


2番目の例は正しくありません。

于 2009-12-08T10:35:27.743 に答える
1

最初のものは変数に割り当てられた関数宣言です(少なくとも、最初に変数型宣言が欠落しているにもかかわらず、そうあるべきです)、2番目のものはおそらくオブジェクト宣言に関連しています。

于 2009-12-08T10:35:59.887 に答える
1

それらは無名関数と呼ばれます。あなたはここでそれらについてもっと読むことができます:

http://www.ejball.com/EdAtWork/2005/03/28/JavaScriptAnonymousFunctions.aspx

于 2009-12-08T10:36:18.280 に答える
1

最初の例では、と呼ばれるグローバル変数(その名前のローカル変数がまだ存在しない場合)を作成しsome_func、それに関数を割り当てて、それをsome_func()呼び出すことができます。

2番目の例は、オブジェクト内の関数宣言です。showオブジェクトのプロパティの値として関数を割り当てます。

var myObj = {
    propString: "abc",
    propFunction: function() { alert('test'); }
};

myObj.propFunction();
于 2009-12-08T10:38:14.873 に答える
0

最初の1つ...

some_func = function(value) {  
    // some code here
}

は変数を宣言し、それに匿名関数を割り当てています。これは...と同等です。

function some_func (value) {  
    // some code here
}

2つ目は次のようになります...

obj = {
    show:function(value){
       // some code here
    }
}
// obj.show(value)

と同等...

//pseudo code
class MyClass {
    function show (value) {
        // some code here
    }
}
obj = new MyClass();    // obj.show(value)

乾杯

于 2009-12-08T10:46:34.187 に答える