関数式に名前を付けても、関数式の名前を実際に参照できない場合はどうなりますか?関数式に名前を付けることができない場合は、関数式の名前を付けるポイントは何ですか?
var f = function g() {
console.log("test");
};
g(); // ReferenceError: g is not defined
関数式に名前を付けても、関数式の名前を実際に参照できない場合はどうなりますか?関数式に名前を付けることができない場合は、関数式の名前を付けるポイントは何ですか?
var f = function g() {
console.log("test");
};
g(); // ReferenceError: g is not defined
ああ、あなたはです。その名前で参照してください。これらの名前はの中にしか存在しませんの機能の範囲です。
var f = function g() {
// In here, you can use `g` (or `f`) to reference the function
return 'test';
};
// It only exists as `f` here
console.log(f());
これの理由の1つは、ここで関数を参照するのに 'f'を使うと危険です。 'f'は関数式の後で' null'に再定義され、関数内で 'f()'を呼び出そうとすると投げられます。 – nrabinowitz
特に便利な点は、デバッグ時に役立つ点です。
エラーが発生すると、コンソールのスタックトレースに関数名が表示されます。それ以外の場合は、スタックトレース内の行は無名関数のみを参照します。
名前を付けることで、関数の目的をより明確にすることもできます。
あなたの周りに渡された再帰関数を作成する場合、それは重要です。関数に名前を付けると、それ自体のスコープ内で自身を知ることができます。
ここでは、再帰関数を作成する一種のファクトリ関数を作成しました。再帰関数が正しく機能するためには、はが必要です。
これは、モジュールエクスポートとして再帰関数を返すような、より広い意味で適用されると想像できます。非常に定義することで
var
func = (function() {
return function rec (a) {
console.log(a);
return a >= 5 ? 'done' : rec(a + 1);
};
}),
invoke = function (f, args) {
return f.apply(null, args);
};
console.log(
invoke(func(), [1])
);
、何を定義していることは匿名関数ではありません。
function [name]([param[, param[, ... param]]]) {
statements
}
名:
関数名。省略することができます。この場合、関数 は無名関数として知られています。あなたは今のvar名
f()
でそれを呼び出すことができますし、今では他の関数にパラメータとして関数を渡すことができるので
さらに、peoleの多くは匿名関数ではないと
var f = function() {
return 'test';
};
を検討します名前はfunctionThatTakesCallback(f)
です。構文で
(function(when){
console.log("run me :", when);
})("right now");
あなたは:
$('#id').on('click', function(){
console.log("I am anonymous");
});
か、すぐに実行する機能として:私の頭の中で
、真の無名関数は、コールバックに渡されたものとして、そのような一切の名前を持っていません現在、ES6(ほとんどのIEブラウザではこの機能を実装しています)では、f.name
はg
です。あなたが再発し、それを使用することができ
をデバッグするときに便利です:
var f = function g (n, m) {
if (n>0) {
return g(n - 1, m = m + 'meta');
}
return m + 'test';
};
console.log(f(10, 'super'));
https://kangax.github.io/nfe/ – SLaks
は 'F()'のような呼び出し可能なその機能はありませんか? – cat
私はそうは思わない。 –