В чем разница между анонимными и встроенными функциями в JavaScript? - программирование
Подтвердить что ты не робот

В чем разница между анонимными и встроенными функциями в JavaScript?

Название подводит итог моему вопросу. Пример, демонстрирующий точку, будет приятным.

4b9b3361

Ответ 1

Во-первых, не существует консенсусного определения встроенных функций в JavaScript. Я считаю, что функция встроенная является частным случаем функции JavaScript. Функция встроенная - это функция, назначенная переменной, созданной во время выполнения, а не в параметре.

Анонимные функции и встроенные функции практически одинаковы, поскольку они создаются во время выполнения. Разница в том, что встроенная функция назначается переменной и поэтому ее можно использовать повторно. Таким образом, встроенные функции работают так же, как и регулярная функция.

Функции

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() {}.

Ответ 2

Анонимные функции определяются следующим образом

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

Однако определение встроенной функции для меня несколько неясное.

Ответ 3

Встроенная функция несколько отличается, ссылаясь на wikipedia:

встроенная функция - это функция, на которую запросили компилятор выполнить встроенное расширение. Другими словами, программист запросил, чтобы компилятор вставлял весь кусок функции в каждое место, вызываемое функцией, а не генерировал код для вызова функции в одном месте, где он определен. Компиляторы не обязаны соблюдать этот запрос.

Javascript не поддерживает концепцию встроенной функции. Но я нашел несколько ссылок в Интернете, где обратные вызовы вроде:

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

называются встроенной функцией. Поскольку вы можете видеть, что у этих функций нет ни одного имени, так что они практически такие же, как анонимная функция. Я думаю, поскольку вы определяете функцию, в которой вы ее используете, на нее ссылалась встроенная функция, но имя "анонимная функция" лучше всего описывает понятие.

Ответ 4

Встроенная функция

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

Анонимная функция

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

Они делают то же самое, но встроенная функция лучше, если вы хотите ее повторно использовать. Аноним хорош для одноразового использования, потому что вам не нужно беспокоиться, будет ли его имя конфликтующим с другими переменными, и оно короче.

Так что это зависит от вашей ситуации.