2015-03-25 2 views
1

Как я понимаю, обратный вызов - это функция, выполняемая после выполнения ее родительского метода. Но метод attr() в приведенном ниже коде, кажется, не выполняется первым, поскольку это должно быть как его имя «обратный вызов». Не могли бы вы помочь мне понять этот код?Функция обратного вызова для attr()

$("button").click(function(){ 
     $("#w3s").attr("href", function(i, origValue){ 
      return origValue + "/jquery"; 
     }); 
    }); 

Похоже, что «функция (i, origValue)» выполняется перед «attr()».

+2

Вы неправильно понимаете, что такое обратные вызовы. – SLaks

+2

[JQuery '.attr (attributeName, function)' docs] (http://api.jquery.com/attr/#attr-attributeName-function) – epascarello

+1

«Обратный вызов» (в общем случае) - это любая функция, которая передается как аргумент другой функции. Обратный вызов 'success' или' error' запускается после того, как функция AJAX возвращает данные. Это не такой обратный вызов. – Blazemonger

ответ

2

«Обратный вызов» не обязательно выполняется после метода, в который он передан. Он выполняется всякий раз, когда вызываемый метод хочет выполнить.

В этом случае реализация .attr() вызывает обратный вызов , а работает. Он выполняет итерацию через элементы объекта jQuery и вызывает обратный вызов один раз для каждого элемента. Последний вызов обратного вызова будет завершен до того, как будет возвращен вызов .attr().

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

В этом случае, поскольку нет асинхронного смешного бизнеса, почему API должен включать обратный вызов? Точка обратного вызова в .attr() должна предоставить способ принятия дополнительных решений или выполнения дополнительных вычислений на основе каждого элемента. С обратным вызовом ваш собственный код (функция, которую вы передаете в качестве обратного вызова) может проверять каждое исходное значение атрибута и интерпретировать его, но вы хотите это сделать. Код может решить оставить некоторые элементы самостоятельно при обновлении других, основываясь на ваших собственных критериях. Вы по-прежнему можете воспользоваться кодом jQuery, выполняющим итерацию для вас, и вы можете сосредоточиться только на логике для изучения и обновления значений атрибутов.

+0

Большое вам спасибо за подробное объяснение! –

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