2015-05-13 5 views
1

Какова цель вышеуказанной строки кода. Я специально смущен OR-ing функцией() {} '. Почему пустая функция? Чтобы дать немного больше контекста строке кода, вот более полное определение функции.callback = обратный вызов || function() {};

this.detectQRCode = function(imageData, callback) { 

    callback = callback || function() {}; 

    client.decode(imageData, function(result) { 
     if(result !== undefined) { 
     self.currentUrl = result; 
     } 
     callback(result); 
    }); 
}; 
+0

Это то же самое, что и 'if (! Callback) callback = function() {};'. То есть он определяет значение _fallback_ – hindmost

+0

Это означает, что если функция обратного вызова существует, то выполните этот обратный вызов или просто ничего не сделайте, выполнив функцию exmpty ... – Rayon

+0

Если никакой обратный вызов не назначает 'function() {}', так что последующее выполнение 'callback' не ошибка выброса – kidwon

ответ

0

Это всего лишь стиль кодирования «короткого замыкания». Он проверяет, чтобы обратный вызов не был определен. Если он не определен, он присваивает ему анонимную функцию, чтобы код callback() не прерывался.

Это эквивалентно

if(typeof(callback) == "undefined") callback = function(){}; 

ловушка этого подхода заключается в том, что если обратный вызов определяется, но не является функция, то с помощью callback() на то, что не может быть названо вызовет ошибку. Лучше всего использовать

if(toString.call(callback) != "[object Function]") callback = function(){}; 
Смежные вопросы