web-dev-qa-db-ja.com

JavaScriptの匿名関数とインライン関数の違いは何ですか?

タイトルは私の質問を要約しています。ポイントを示す例は、ニースでしょう。

19
matori82

まず第一に、JavaScriptのインライン関数のコンセンサス定義はないようです。 inline関数はJavaScript関数の特殊なケースであると考えています。 inline関数は、解析時ではなく実行時に作成される変数に割り当てられる関数です。

匿名関数とインライン関数は、実行時に作成されるという点で実質的に同じです。違いは、インライン関数が変数に割り当てられているため、再利用できることです。このように、インライン関数は通常の関数と同じように機能します。

関数

function func() {
    alert ('function');
} 

$('a').click(func);

インライン関数

var func = function() { 
    alert ('inline') 
};

$('a').click(func);

無名関数

$('a').click(function() {
    alert('anonymous');
});

匿名およびインライン関数は、通常の関数と比較してパフォーマンスが低下する可能性があります。 var functionName = function(){} vs function functionName(){} を参照してください。

28
Daniel Gimenez

インライン関数は、ウィキペディアから引用して多少異なります:

インライン関数は、コンパイラがインライン展開を実行するように要求された関数です。つまり、プログラマーは、定義された1か所で関数を呼び出すコードを生成するのではなく、関数が呼び出されるすべての場所に関数の完全な本体を挿入するようコンパイラーに要求しました。コンパイラーは、この要求を尊重する義務はありません。

Javascriptは、インライン関数の概念をサポートしていません。しかし、私はコールバックが好きなウェブでいくつかの参照を見つけました:

(function(){
  setTimeout(/*inline function*/function(){ /*some code here*/ }, 5);})
();

インライン関数と呼ばれます。ご覧のとおり、これらの関数には名前もありません。したがって、これらは基本的に匿名関数と同じです。あなたはそれを使用している関数を定義しているので、インライン関数によって参照されていると思いますが、「匿名関数」という名前は概念を最もよく説明しています。

5
CSStudent

無名関数はこのように定義されます

var x = 1;
(function(x){
    // Do something
    console.log(x); // 1
})(x);

しかし、インライン関数の定義は私には少し不明瞭です。

2
jhnlsn

インライン関数

var foo = function (){ 
   alert('Hello') 
}
setTimeout(foo, 100);

匿名関数

setTimeout(function(){ 
   alert('Hello') 
}, 100);

彼らは同じことをやっていますが、インライン関数は再利用したいときに優れています。 Anonymousは、名前が他の変数と競合するかどうかを心配する必要がなく、短いので、1回限りの使用に適しています。

それはあなたの状況次第です。

1
Chokchai