«Обратный вызов» не обязательно выполняется после метода, в который он передан. Он выполняется всякий раз, когда вызываемый метод хочет выполнить.
В этом случае реализация .attr()
вызывает обратный вызов , а работает. Он выполняет итерацию через элементы объекта jQuery и вызывает обратный вызов один раз для каждого элемента. Последний вызов обратного вызова будет завершен до того, как будет возвращен вызов .attr()
.
Понятие о том, что обратные вызовы вызываются после завершения первоначального вызванного метода, вероятно, связано с тем, что обратные вызовы обеспечивают способ решения асинхронных ситуаций. Однако это не имеет никакого отношения к концепции обратного вызова; вместо этого, это способ воспользоваться тем фактом, что обратные вызовы доступны на языке.
В этом случае, поскольку нет асинхронного смешного бизнеса, почему API должен включать обратный вызов? Точка обратного вызова в .attr()
должна предоставить способ принятия дополнительных решений или выполнения дополнительных вычислений на основе каждого элемента. С обратным вызовом ваш собственный код (функция, которую вы передаете в качестве обратного вызова) может проверять каждое исходное значение атрибута и интерпретировать его, но вы хотите это сделать. Код может решить оставить некоторые элементы самостоятельно при обновлении других, основываясь на ваших собственных критериях. Вы по-прежнему можете воспользоваться кодом jQuery, выполняющим итерацию для вас, и вы можете сосредоточиться только на логике для изучения и обновления значений атрибутов.
Вы неправильно понимаете, что такое обратные вызовы. – SLaks
[JQuery '.attr (attributeName, function)' docs] (http://api.jquery.com/attr/#attr-attributeName-function) – epascarello
«Обратный вызов» (в общем случае) - это любая функция, которая передается как аргумент другой функции. Обратный вызов 'success' или' error' запускается после того, как функция AJAX возвращает данные. Это не такой обратный вызов. – Blazemonger