web-dev-qa-db-ja.com

JavaScript関数宣言

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

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

そして

show:function(value){
   // some code here
}
27
Anand Shah

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

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

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

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

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

25
anon355079

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

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

function foo() {}

残りはすべて関数です:

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

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

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

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

4)プロトタイプのメソッドとして(newの実行回数に関係なく、一度だけ作成されます)

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

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

var foo = function() {};

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

(function() {})();

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

72
Justin Johnson

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);
    }
};
4
MBO

それを行う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番目の例は正しくありません。

2
jldupont

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

1
yoda

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

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

1
Sarfraz

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

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

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

myObj.propFunction();
_
1
David Hedlund

最初の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)

乾杯

0
Ei Maung