関数を参照する2つの方法に従ってみました:
初め
let a = function() {
somefunction();
}
2番
let a = somefunction;
somefunction
どちらの場合も、次の場所は次のとおりです。
function somefunction() {
alert("hello");
}
これら2つの方法に違いはありますか?
関数を参照する2つの方法に従ってみました:
初め
let a = function() {
somefunction();
}
2番
let a = somefunction;
somefunction
どちらの場合も、次の場所は次のとおりです。
function somefunction() {
alert("hello");
}
これら2つの方法に違いはありますか?
この例は違いを明確にするかもしれないと思います。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
です。
somefunction
2 番目のケースでは、いくつかの関数が直接呼び出されているため、引数は で使用できます。
a
を使用して機能的に同等になるように再定義する方法を次に示します。apply
var a = function() { somefunction.apply(this, arguments); }
これをコンソールで実行すると、引数配列が出力されます。
=> a('a', 1);
['a', 1]