5

関数を参照する2つの方法に従ってみました:

初め

let a = function() {
   somefunction();
}

2番

let a = somefunction;

somefunctionどちらの場合も、次の場所は次のとおりです。

function somefunction() {
  alert("hello");
}

これら2つの方法に違いはありますか?

4

5 に答える 5

3

この例は違いを明確にするかもしれないと思います。arguments関数に渡される各引数を含むオブジェクトのような配列です。

お気に入りのブラウザ コンソールでこれらの各行を実行してみてください。

var somefunction = function() { console.log(arguments); };

最初の例は、名前付き関数a閉じる名前付き関数の定義を示していますsomefunction

var a = function() { somefunction(); };

2 番目の例ではb、 を直接参照しsomefunctionます。これにより、呼び出しは呼び出しbと同じになりsomefunctionます。

var b = somefunction;

aこれらのそれぞれをいくつかの引数とともに呼び出すとb、違いがわかります。

=> a('a', 1);
[]

=> b('a', 1);
['a', 1]

最初のケースでは、argumentsオブジェクトは空です。これは、 に渡された引数が にa転送されなかったためsomefunctionです。

somefunction2 番目のケースでは、いくつかの関数が直接呼び出されているため、引数は で使用できます。

aを使用して機能的に同等になるように再定義する方法を次に示します。apply

var a = function() { somefunction.apply(this, arguments); }

これをコンソールで実行すると、引数配列が出力されます。

=> a('a', 1);
['a', 1]
于 2013-10-27T22:15:49.250 に答える