2016-06-23 1 views
0

В большинстве методов обработки JavaScript (итератор) первый аргумент - это элемент, а второй - индекс. Но в случае jQuery всегда второй аргумент является элементом, а первый - индексом. Почему они отформатировались по-другому? Это для избежания путаницы между ними, поскольку оба содержат такие методы, как карта, фильтр и т. Д. Есть ли какое-то особое значение для этого? Мне просто интересно узнать.Методы JQuery и JavaScript

+1

Нет, нет. В этом случае jQuery является повстанцем. См. Аргументы ['$ .map'] (http://api.jquery.com/jquery.map/) и [' $ .fn.map'] (http://api.jquery.com/map/) обратные вызовы. – undefined

+0

@Vohuman: yup, в случае '$ .map' первый аргумент является значением ... я этого не заметил :) –

+0

Потому что вы этого не ожидали. Это непоследовательность и запутанная особенность. – undefined

ответ

2

Это связано с тем, что jQuery полагается на this; ему не нужен элементный итератор.

$('selector').each(function(){ 
    // 'this' refers to unwrapped jQuery selector element; no need for arguments == cleaner code 
    var $this = $(this); 
}); 

В Vanilla JS, итераторы опираются на параметрах:

[].forEach(function(el, index){ 
    // 'this' refers to Window object; use the argument 
    el.querySelector('foo') 
}); 

Поскольку JQuery может использовать контекстный элемент с помощью this, это на самом деле не нужно аргументы. Мне пришлось бы искать историю библиотеки, чтобы даже увидеть, существовал ли этот элемент в качестве второго аргумента в более ранних версиях.

+0

Можете ли вы подробнее рассказать об ответе. это не ясно, это больше похоже на комментарий – guradio

+1

@guradio, если вы охладите ответ, будет обновлен;) – BotNet

+0

yup, что может быть причиной, поэтому значение arg здесь не так важно :) –