タイトルは私の質問を要約しています。ポイントを示す例はいいでしょう。
4 に答える
まず第一に、JavaScript のインライン関数のコンセンサス定義がないようです。私はインライン関数を JavaScript 関数の特殊なケースと考えています。インライン関数は、解析時ではなく実行時に作成される変数に割り当てられる関数です。
匿名関数とインライン関数は、実行時に作成されるという点で実質的に同じです。違いは、インライン関数が変数に割り当てられているため、再利用できることです。このように、インライン関数は通常の関数と同じように機能します。
es6 より前の匿名関数とインライン関数は、function キーワードを使用して通常の関数と同様に宣言されていました。es6 の出現により、無名およびインライン関数も、よりコンパクトなアロー関数構文で宣言できるようになりました。
関数
function func() {
alert ('function');
}
$('a').click(func);
インライン関数
var func = function() {
alert ('inline')
};
$('a').click(func);
// Alternative es6+ inline arrow function.
let func2 = () => alert('inline');
$('a').click(func2);
匿名関数
$('a').click(function() {
alert('anonymous');
});
// Alternative es6+ anonymous arrow function.
$('a').click(() => alert('anonymous'));
ウィキペディアから引用すると、インライン関数は多少異なります。
インライン関数は、コンパイラがインライン展開を実行するように要求された関数です。つまり、プログラマーは、関数が定義されている 1 つの場所で関数を呼び出すコードを生成するのではなく、関数が呼び出されるすべての場所に関数の完全な本体を挿入するようにコンパイラーに要求しました。コンパイラは、この要求を尊重する義務はありません。
Javascript はインライン関数の概念をサポートしていません。しかし、コールバックが好きなウェブでいくつかの参照を見つけました:
(function(){
setTimeout(/*inline function*/function(){ /*some code here*/ }, 5);})
();
インライン関数と呼ばれます。ご覧のとおり、これらの関数には名前もありません。基本的に無名関数と同じです。使用している関数を定義しているので、インライン関数によって参照されていますが、「匿名関数」という名前がその概念を最もよく表していると思います。
無名関数は次のように定義されます
var x = 1;
(function(x){
// Do something
console.log(x); // 1
})(x);
ただし、インライン関数の定義は私には少し不明確です。
インライン関数
var foo = function (){
alert('Hello')
}
setTimeout(foo, 100);
匿名関数
setTimeout(function(){
alert('Hello')
}, 100);
彼らは同じことをしていますが、再利用したい場合はインライン関数の方が優れています。Anonymous は、その名前が他の変数と競合するかどうかを心配する必要がなく、短いため、1 回限りの使用に適しています。
したがって、それはあなたの状況によって異なります。