Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Растолкуйте, пожалуйста код (внутри) (https://javascript.ru/forum/misc/35352-rastolkujjte-pozhalujjsta-kod-vnutri.html)

deivan 08.02.2013 13:59

Растолкуйте, пожалуйста код (внутри)
 
socket.on('data', function (data) {
	data.__sock = parseInt(data.__sock);
	if(data.__sock > 0 && data.__sock !== userId) return;
	
	for (f in data) {
		if(f !== undefined && typeof window[f] == 'function')
		{
			var func = window[f];
			func(data[f]);
		} else if(f !== undefined && f.indexOf(".") != -1) {
			var re = /([a-z]{1,})\.([a-z]{1,})/i;
			found = f.match(re);
			if(typeof window[found[1]] == 'object' && typeof window[found[1]][found[2]] == 'function') {
				var func = window[found[1]][found[2]];
				func(data[f]);
			}
		}
	}
});

что-то совсем я потерялся, что и когда запускается?.

Deff 08.02.2013 14:31

Может так доходчивей ?
socket.on('data', function (data) {
	data.__sock = parseInt(data.__sock);
	if(data.__sock > 0 && data.__sock !== userId) return;
	
	for (f in data) {
		if(f !== undefined && typeof window[f] == 'function') {
		     var func = window[f];func(data[f]); return;
		}
		
		if(f !== undefined && f.indexOf(".") != -1) {
			var re = /([a-z]{1,})\.([a-z]{1,})/i;
			found = f.match(re);
			if(typeof window[found[1]] == 'object' && typeof window[found[1]][found[2]] == 'function') {
				var func = window[found[1]][found[2]];
				func(data[f]);
			}
		}
		
	}
});

deivan 08.02.2013 14:34

хотелось бы услышать комментарии по прохождению цикла фор

zebra 08.02.2013 14:38

Код не мой, я просто размести объяву? :no:

deivan 08.02.2013 15:05

по пятницам, я так понимаю, здесь не принято подавать?..
(нико кланяясь) дякуэмо вам!!!

Deff 08.02.2013 15:20

deivan,
Здесь сложно объяснить, поскольку в цикле тестируются переменные, не описанные в теле данной функции, тестируется наличие и тип
И, в зависимости от результата присваиваются глобальные имена

dmitriymar 08.02.2013 15:21

deivan,
а в поиске посмотреть как работает цикл for in религия не позволяет? и чем он отличается от цикла со счётчиком for ?

deivan 08.02.2013 15:31

dmitriymar, мое непонимание не касается принципа работы цикла.

А вот Deff все верно понял - я с трудом понимаю что там в глобальную область уходит...

(нашел кусок чужого кода, он интересно построен, захотелось разобраться.. )

Deff 08.02.2013 15:40

Ксать вот эта фигня f !== undefined ) может и неверна

alert(f !== undefined )


Наверное так
<script>
alert(typeof f != 'undefined' )
var f=1;
alert(typeof f != 'undefined' );
</script>

Deff 08.02.2013 15:42

socket.on('data', function (data) {
	data.__sock = parseInt(data.__sock);
	if(data.__sock > 0 && data.__sock !== userId) return;
	
	for (f in data) {

		if(typeof f != 'undefined' && ) return;
		if(typeof window[f] == 'function') {
		     var func = window[f];func(data[f]); return;
		}
		
		if(f.indexOf(".") != -1) {
			var re = /([a-z]{1,})\.([a-z]{1,})/i;
			found = f.match(re);
			if(typeof window[found[1]] == 'object' && typeof window[found[1]][found[2]] == 'function') {
				var func = window[found[1]][found[2]];
				func(data[f]);
			}
		}
		
	}
});


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