2015-09-30 4 views
3

Пожалуйста, помогите понять код ниже:«обратный вызов» ключевое слово в JavaScript

// define our function with the callback argument 

function some_function(arg1, arg2, callback) { 
    // this generates a random number between 
    // arg1 and arg2 

    var my_number = Math.ceil(Math.random() * (arg1 - arg2) + arg2); 

    // then we're done, so we'll call the callback and 
    // pass our result 
    callback(my_number); 
} 

// call the function 
some_function(5, 15, function(num) { 
    // this anonymous function will run when the 
    // callback is called 
    console.log("callback called! " + num); 
}); 

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

+2

это просто функция «указатель». например 'foo = function() {alert ('hi mom!'); }; some_function (5, 15, foo) ' –

ответ

0

«обратный вызов» - это функция, переданная в качестве аргумента методу «some_function». Затем он вызывается с аргументом «my_number».

когда «some_function» на самом деле называют, как показано ниже

// call the function 
some_function(5, 15, function(num) { 
    // this anonymous function will run when the 
    // callback is called 
    console.log("callback called! " + num); 
}); 

он получает все определение третьего аргумента функции. поэтому в основном ваш «обратный вызов» аргумент имеет это значение ниже

function(num) { 
    // this anonymous function will run when the 
    // callback is called 
    console.log("callback called! " + num); 
} 

Чтобы лучше понять, как функция может быть передана в качестве аргумента другой функции, посмотрите на this answer.

+0

, но когда функция будет называться some_function (5, 15, function (num) { // эта анонимная функция будет работать, когда вызов // callback называется console.log (" callback called! "+ num); }); – user3519807

+0

Первая часть - это определение: function some_function (arg1, arg2, callback) {...} Затем вторая часть является фактическим обратным вызовом функции: some_function (5, 15, function (num) {...}) ; Я думаю, что часть, которую вам трудно было понять, - это третий аргумент в обратном вызове после 5, 15. Это ДРУГИЕ функции, и человек, который написал это, определял функцию DIRECTLY AS PARAMETER как часть аргументов обратного вызова. Имеет ли это смысл? – Sonofkyuss

+0

Другой способ объяснить это; вот еще один способ написать весь блок кода, который вы первоначально разместили (делает то же самое): 'function some_function (arg1, arg2, callback) { // это создает случайное число между // arg1 и arg2 var my_number = Math.ceil (Math.random() * (arg1 - arg2) + arg2); // Затем мы закончили, поэтому мы будем называть обратный вызов и // передаем наш результат callback (my_number); } функция callbackArgFunct (num) { console.log («callback called!» + Num); } some_function (5, 15, callbackArgFunct); ' – Sonofkyuss

2

Пробел в логике Я думаю, что вам сложно провести время с анонимными, неназванными функциями. Когда-то назывались все функции. Так код был написан так:

function MemberProcessingFunction() { 
    // etc 
} 

function AdminProcessingFunction() { 
    // etc 
} 

var loginProcessingFunction; 

if (usertype == 'BasicMember') { 
    loginProcessingFunction = MemberProcessingFunction; 
} 
else if (usertype == 'Admin') { 
    loginProcessingFunction = AdminProcessingFunction; 
} 
loginProcessingFunction(); 

Кто-то подумал: «Это немой я только создание этих имен функций, чтобы использовать их в одном месте в моем коде Давайте сливаться, что вместе...»

var loginProcessingFunction; 

if (usertype == 'BasicMember') { 
    loginProcessingFunction = function() { 
    // etc 
    }; 
} 
else if (usertype == 'Admin') { 
    loginProcessingFunction = function() { 
    // etc 
    }; 
} 
loginProcessingFunction(); 

Это особенно экономит много времени, когда вы передаете функцию другой функции в качестве аргумента. Часто это используется для «обратных вызовов» - случаев, когда вы хотите запустить определенный код, но только после определенная неопределенная функция времени завершила свою работу.

Для вашей верхней функции callback - это имя третьего аргумента; он ожидает, что это будет функция, и она предоставляется при вызове метода. Это не ключевое слово для языка - если бы вы «нашли/заменили все» слова «обратный вызов» на «batmanvsuperman», он все равно будет работать.

Смежные вопросы