2017-02-23 42 views
0

Изучение javascript и желание получить более ясную информацию о обратных вызовах.Функция с обратным вызовом

В следующем фрагменте кода

function do_a(callback){ 
    // if callback exist execute it 
    callback && callback(); 
} 

function do_b(){ 
    console.log('do_b executed'); 
} 
//one way 
do_a(function(){ 
    do_b(); 
}); 

//other way 
do_a(do_b); 

Есть ли разница между этими двумя способами do_a() называется. Один передает указатель на функцию do_b, а другой передает функцию, которая выполняет функцию do_b. Все примеры, которые я видел, используют в первую очередь. Это более предпочтительный стиль?

+0

Оба не работают, но, конечно, второй один проще –

+1

В этом примере нет - более сложный код, потенциально - это зависит действительно от того, сколько контроля вы хотите над 'это '. –

+0

Вместо того, чтобы сосредоточиться на обратных вызовах, вам стоит больше сосредоточиться на 'Promise', который может заменить обратные вызовы и сделать ваш код более читаемым. – baao

ответ

3

Первый способ просто создает дополнительную анонимную функцию, которая вызывает вторую функцию. Это полезно, если вы хотите выполнять действия до или после вызова обратного вызова, например.

do_a(function(){ 
    console.log("I'm going to call the second function..."); 
    do_b(); 
    console.log("Second function is done."); 
}); 

В противном случае я не вижу никакой точки в этой дополнительной функции, а второй способ лучше.

0

Вам не нужно передавать его в качестве аргумента. Непосредственно вызовите его.

function abc(){ 
 
a = "function abc"; 
 
console.log(a); 
 
cde(); 
 
console.log(a); 
 
} 
 
function cde(){ 
 
a="function cde"; 
 
} 
 

 
abc();