Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Объясните код плиз! (https://javascript.ru/forum/misc/17000-obyasnite-kod-pliz.html)

unlike777 02.05.2011 15:56

Объясните код плиз!
 
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
vars[key] = value;
});
return vars;
}

Я понимаю, что в итоге получается... юзаю это
знаю что function(m,key,value) это анонимная функция
и /[?&]+([^=&]+)=([^&]*)/gi регулярное выражение

Но, что за параметры мы передаем в функцию, которых нигде больше нет, а параметр m вообще нигде не используется.... о_О я в шоке
как эти параметры могут хранить данные если мы им ничего не присваиваем, короче связи между этими параметрами и то что получается в итоге никакой нет, но все работает КАК ТАК!?

Kolyaj 02.05.2011 15:59

http://javascript.ru/String/replace

B@rmaley.e><e 02.05.2011 16:04

Цитата:

Сообщение от unlike777
что за параметры мы передаем в функцию

_Мы_ ничего не передаем. _Мы_ только принимаем. А передает параметры внутренняя реализация функции replace в JS. Она вызывает переданную функцию-callback с n (или более, сейчас не существенно) аргументами: сама совпавшая строка (m, которая нам не нужна, поэтому и не используется) и остальные (n - 1) аргументов - захваченные строки (которые соответствуют содержимому скобок () в регэкспе).

unlike777 02.05.2011 17:10

Если replaceText является функцией, то для каждой совпадающей подстроки вызывается функция, количество аргументов которой равно m + 3, где m — число круглых скобок, обозначающих отдельные шаблоны в аргументе rgExp. Первым аргументом является подстрока, поиск которой выполняется. Следующие m аргументов — это все найденные совпадения. Аргумент m + 2 — это смещение в текущем stringObj, содержащем найденное совпадение, а аргумент m + 3 — это сам stringObj. Результатом является строка, в которой все найденные подстроки заменены соответствующий значением, возвращенным вызываемой функцией.

Жесть
так и не понятно, что находится в m, key и value =)

unlike777 02.05.2011 20:45

плин не могу понять эти передаваемые функции в функции
вот есть пример
object.click(function(eventObject){
eventObject.doSomething;
});
поправьте меня, потому что моя логика не укладывается =)

У объекта есть метод click, когда он выполняется
в него передается анонимная функция (со своим без разницы каким кодом), в анонимную функцию передается eventObject, который используется в этой функции, но как он может передаваться если он нигде не существует, а существует токо в самой функии, он вроде создается в этой же функции в которую передается....
нипонятно Т_Т

пытаюсь построить последовательную цепочку всех преобразований, что бы понять эту конструкцию, но не выходит (что за чем идет и что куда передается)

ЗЫ как функция может сама в себя передать чтото!?

melky 02.05.2011 20:48

Цитата:

Сообщение от unlike777 (Сообщение 103067)
object.click(function(eventObject){
eventObject.doSomething;
});


У объекта есть метод click, когда он выполняется
в него передается анонимная функция (со своим без разницы каким кодом),

в анонимную функцию передается eventObject, который используется в этой функции, но как он может передаваться если он нигде не существует, а существует токо в самой функии, он вроде создается в этой же функции в которую передается....
нипонятно Т_Т

вот тоже самое

window.onclick = function(event) {

   event.doSMTH.....

}


:) дать мануал по ивентам с этого сайта?

unlike777 02.05.2011 20:55

2melky
спс мануалов я начитался =)

Я не могу понять процесс, когда в eventObject заносятся данные!!!!!
нигде не обявлена... строгого имени не требует, принимает любое имя...
и в то же время все робит! когда eventObject становиться не абстрактным а реальным обектом?

melky 02.05.2011 20:59

при клике на элемент :)

Kolyaj 02.05.2011 21:03

Цитата:

Сообщение от unlike777
object.click(function(eventObject){
eventObject.doSomething;
});

В переводе на русский.
Человек объекту: чувак, когда пользователь кликнет по ссылке, вызови вот эту функцию и передай ей объект события.

unlike777 02.05.2011 21:16

2Kolyaj
Ну абстрактно понятно...

eventObject'у пофиг на именную привязку
=> САМ метод click проверяет есть ли функция среди переданных ему объектов, если есть то первый переданный параметр ЭТОЙ функции связывает с реальным ивентОбектом(типо eventObject(пох какое имя) = *реально произошедшее событие*???!?!?!?!?!? так штоле?

мне нужна не абстрактное объяснение, а на практике как это происходит =)

мб я тупой, токо помидорами не закидывайте)


Часовой пояс GMT +3, время: 09:53.