Меню
✘Скрыть меню
Меню заработка
✘Скрыть меню
Загрузка.. nostroma.online from NOSTROMA - best life and beautiful workЭто ужасно тяжелая работа — ничего не делать – Оскар УайльдРешающую роль в работе играет не всегда материал, но всегда мастер – Максим ГорькийЯ слишком энергичен, чтобы работать – Марсель АшарЧто привлекло меня в карьере писателя? Отсутствие бумажной работы.Одни люди работают только для того чтобы работать, другие – для того, чтобы иметь возможность не работать в будущем.Занятие ерундой на рабочем месте развивает боковое зрение, слух и бдительность в целомСтоит статýя в лучах заката с огромным буем, в руках - граната.Друзья, если вы попались на лохотрон, не будьте эгоистами - предупредите других о таком сайте!Секрет гения — это работа, настойчивость и здравый смысл. Томас Эдисон
Меню заработка

Курсы JavaScript

Урок 3. Переменные в JavaScript, обработка ошибок, функции и подъёмы.


Подъём (hoist)

Давайте посмотрим на следующий пример и подумаем, какие три значения выведет команда console.log() в этом фрагменте кода:

	var myVar = "global";
	
	var myFunc = function(){
		console.log(myVar); // первый вывод
		var myVar = "local";
		console.log(myVar); // второй вывод
	};
	
	myFunc();
	
	console.log(myVar); // третий вывод
	

Подумали? А теперь ответ:

1. В строке 3 интерпретатор считает переменную myVar локально объявленной, но не инициализированной (глобальное объявление этой же переменной в первой строке он внутри функции не видит), поэтому первым будет выведено значение undefined;

2. В 5-ой строке console.log(myVar) выведет значение local, т.к. в 4-ой строке переменной myVar было присвоено строковое значение "local";

3. В последней строке интерпретатор уже вышел за пределы функции и теперь видит глобально объявленную и инициализированную переменную myVar, и потому выведет значение global

Наверх поднимаются объявления, но не присвоения. Это значит, что объявленной переменная считается с самой верхней строки из всех строк, где она была объявлена, а присвоенное ей значение будет самым нижним из всех строк, где оно было присвоено данной переменной.

Переменные в JavaScript

Рассмотрим ещё один пример:

	one = "one"; // глобально неявно объявили переменную one
	var two = "two"; // глобально явно объявили переменную two
	
	console.log(two); // Выведет two
	console.log(one); // Выведет one
	
	delete one; // true: удалили переменную one
	delete two; // false: переменная two не удалена
	
	console.log(two); // Выведет two
	console.log(one); // Выведет ошибку ReferenceError
	

Оператор delete удаляет переменную из памяти, поэтому в последней строке при выводе возникает ошибка ReferenceError - попытка обращения к несуществующей переменной. Однако переменную one, оператор delete удалить не смог, т.к. она объявлена явно через var. Переменные, неявно объявленные - уничтожаемые свойства глобального объекта.

Обратиться к переменной можно также через this:

	x = 8;
	var y = 5;
	
	this.x;
	this.y; 
	// Выведет только последний this
	

Для того, чтобы вывести с помощью this переменную x, нужно написать команду this.x; в консоле браузера отдельно.

Команда this обращается к переменным как к свойствам. На глобальном уровне кода объект доступен как this, а в браузере ещё и как window.

При объявлении оператор "запятая" является сократителем для var:

	var x=5, y=8, z=25;
	
	console.log(x, y, z); // 5 8 25
	

Обработка ошибок в JavaScript

В этом уроке мы лишь кратко рассмотрим эту тему, а далее коснёмся её более подробно.

Для того, чтобы при выполнении кода возникшая ошибка не прекратила его полностью, нужно оборачивать фрагменты кода, чреватые ошибками в блоки try-catch.

Рассмотрим пример в котором используются блоки try-catch:

		one = 'one';
		var two = 'two';
		
		console.log(two);
		console.log(one);
		
		delete one;
		delete two;
		
		console.log(two);
		
		try{
			console.log(one);
		}
		catch (e){
			console.log(e);
		}
	

Результат:

В параметр "e" блока catch помещён отчёт об ошибке. Если в блоке try возникнет ошибка, то отчёт об ошибке будет сформирован в блоке catch и выполнение кода продолжится.

Таким образом, если у вас есть подозрения на ошибки в каком-либо участке кода, пишите его в блоке try{}.

Функции и подъёмы

Инструкции var и function объявляют переменные и в обоих случаях действует подъём, но для var поднимается только сам факт объявления, а для function - ещё и тело функции (для вызова функции указывается её имя с круглыми скобками):

	console.log(x()); // x is not a function (x === undefined)
	var x = function (){retutn 1}; // подъём объявления переменной x
	
	console.log(y()); // ReferenceError: y is not defined
	var x = function y(){retutn 1};
	
	console.log(y()); // Выведет 1, подъём тела функции
	function y(){retutn 1}; // Это инструкция
	

Если используется выражение с function (var...function...), то это рассматривается в первую очередь как инструкция var. Даже если function будет там с именем, подъём будет работать только относительно имени переменной после var.

Самовызывающаяся функция

Самовызывающая функция - это функция вида:

	(function(){console.log('Call!')})()
	

Переменные, используемые внутри таких блоков, не видны за их пределами - это позволяет создавать программы, состоящие из не мешающих друг другу блоков, которые могут писать разные программисты. По сути в таком коде совмещены инструкции объявления функции и её вызов.

Самовызывающейся является также рекурсивная функция, о чём речь пойдёт позже. Пример самовызывающейся рекурсивной функции, возвращающей факториал числа:

	var f = function(x){return x<2?1:x*f(--x)};
	
	f(5); // 120
	

Каррирование - явление, при котором некоторой функции, которую возвращает "родительская" функция, доступен переданный аргумент:

	var deg1 = function (x){
		return function (y){
			return Math.pow(x,y);
		}
	}
	
	console.log( deg1(2) (10) );
	

В этом примере вложенной функции доступен второй переданный функции "deg1" аргумент - 10.

Функция Math.pow(x,y); возводит число "x" в степень "y".

Комментарии

Введите Ваше имя:*

Введите e-mail:

Ваш комментарий:*

* Обязательные поля