Как правильно понять сей код?

ак как JavaScript занимаюсь всего месяц, я еще не очень освоил детали. Нужно разъяснение по работе кода. А именно - что происходит в каждой строчке кода:
function historyLoad() {
    var State = History.getState();
    History.log('initial:', State.data, State.title, State.url);
    $('#preload').fadeIn(200);
        if ("/" == State.url.slice(-1)) {
            content = "home";
            getHeader();
            return;
            };
        str = State.url.split('?');
        strSplit = str[1];
        console.log(strSplit);
        l = strSplit.split('&');
        if(l[0]) {
            switch (l[0])   {
                case "en":
                case "ru":
                case "ua":
                    lang = l[0];
                    getHeader();
                    break;
                default:
                    content = "abra";
                    getHeader();
                    break;
            }
            if(l[1]&&undefined!=l[1]) content = l[1]
        } else {
            getHeader();
        }
};
    historyLoad();
History.Adapter.bind(window,'statechange',function(){ // Note: We are using statechange instead of popstate
    // Log the State
    historyLoad();
});
  • Вопрос задан
  • 358 просмотров
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
function historyLoad() {
	// History - это какая-то обертка над History API, что возвращает метод getState точно неизвестно
	var State = History.getState();

	// Просто логирование
	History.log('initial:', State.data, State.title, State.url);

	// Показывается прелоадер
	$('#preload').fadeIn(200);

	// Если последний символ в url слеш, то:
	// 1. изменяется глобальная переменная content
	// 2. выполняется функция getHeader
	// 3. функция завершает работу
	if ("/" == State.url.slice(-1))
	{
		content = "home";
		getHeader();
		return;
	}

	// Разбиваем url по знаку вопроса (забыли var)
	str = State.url.split('?');

	// Берем часть после знака вопроса (забыли var)
	strSplit = str[1];

	console.log(strSplit);

	// Разбивает часть после знака вопроса по амперсанду (забыли var)
	l = strSplit.split('&');

	// Если есть что-то между знаком вопроса и первым амперсандом
	if (l[0])
	{
		// В зависимости от того, что находится перед первым амперсандом
		switch (l[0])
		{
			case "en":
			case "ru":
			case "ua":
				// изменяем глобальную переменную lang
				// вызываем функцию getHeader
				lang = l[0];
				getHeader();
				break;
			default:
				// если первый элемент перед амперсандом не en, ru или ua:
				// 1. изменяется глобальная переменная content
				// 2. выполняется функция getHeader
				content = "abra";
				getHeader();
				break;
		}

		if (l[1] && undefined != l[1])
		{
			// Если что-то есть между первым и вторым амперсандами (ну или просто после первого, если других нет),
			// записываем эту строку в глобальную переменную content
			content = l[1]
		}
	}
	else
	{
		// Вызывем функцию getHeader
		getHeader();
	}
}

// Выполняем функцию при старте страницы
historyLoad();

// слушаем изменение url страницы, используя обертку над History API и выполняем функцию historyLoad
History.Adapter.bind(window, 'statechange', function () { // Note: We are using statechange instead of popstate
	// Log the State
	historyLoad();
});


Ну а вообще, Виталий Пухов прав - ничего особенного в этом коде нет, после месяца изучения js (то есть синтаксис вы уже хорошо понимаете) спокойно можно разбираться, декомпозируя код на небольшие куски.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы