{Въведение в JavaScript}

JavaScript и ECMA Script 6. Променливи и константи. Обхват на променливите.

JavaScript и ECMAScript

JavaScriptе един от най-използваните скриптови езици за програмиране в Интернет. Разработен е през 1995 година от Брендан Айки, за да осигурява динамично взаимодействие между потребител и браузър.
Основата на езиковите особености наJavaScript, са определени в стандарт наречен ECMA-262 (Ecma International).
Езикът определен в този стандарт се нарича ECMAScript. ECMAScript 6 (es6) е скриптов език  стандартизиран от ECMAScript International. Езици като JavaScript, JScript и ActionScript се основават ECMAScript спецификациите.

Скриптът е програмен код, който не се компилира, а се изпълнява от програма, наречена интерпретатор. Когато става въпрос за уеб-сайт, ролята на интерпретатор се поема от браузъра. 

По принцип програмите се пишат на език от високо ниво, който трябва да се преработи и да се превърне в машинен език, за да бъде разбираем от компютъра и да бъде изпълнен от процесора. Това превръщане се извършва от компилатор или интерпретатор и се нарича транслиране. За да се изпълнява дадена програма, компилаторът превежда изходния код само един път, а интерпретаторът извършва превода при всяко нейно стартиране. В обичайния случай компилаторите се използват от програмните езици, а интерпретаторите се използват от скриптовите езици.
КОМПИЛАТОР
 – това е компютърна програма, която превежда нашият код до машинен език.
ИНТЕРПРЕТАТОР– това е компютърна програма, която прави анализ, превежда на машинен език кода и го изпълнява. Най-общо казано интерпретатора е програма, която изпълнява други програми.

фиг. 1

Елементи на JavaScript

Една програма на JavaScript може да бъде съставена от:

  • Променливи (Variables) −Представлява именуван блок в паметта, който може да съхранява стойности за програмата.
  • Литерали (Literals) −Представляват постоянни / фиксирани стойности.
  • Оператори (Operators) −Символи, които определят как ще бъдат обработени операндите.
  • Ключови думи (Keywords) −Думи, които имат специален смисъл в контекста на един език.
  • Модули (Modules) −Представляват блокове с код, които могат да бъдат използвани повторно в различни програми (скриптове).
  • Коментари (Comments) −Използва се за подобряване на четливостта на кода. Те се игнорират при изпълнение на скрипта. 
  • Идентификатори (Identifiers) −Това са имената, дадени на елементи в програмата като променливи, функции и т.н

Правила за съставяне на идентификатор:
Идентификаторите могат да включват както знаци, така и цифри, но не могат да започват с цифра.
Идентификаторите не могат да включват специални символи, с изключение на долната черта (_)или знака за долар ($).
Идентификаторите не могат да съдържат интервали.
Идентификаторите не могат да бъдат ключови думи. Те трябва да бъдат уникални.
Идентификаторите са чувствителни към главни и малки букви.

Валидни идентификаториНевалидни идентификатори
firstName
first_name
num1
$result
Var#
first name
first-name
1number

Коментари
•Коментар на един ред ( // ) 
•Многоредовкоментар ( /* */ )

JavaScript и HTML

Вграждането на JavaScript в HTML документможе да стане по два начина: чрез връзка към външен файл, подобно на CSS, и чрез вграждане в заглавната секция или тялото на документа с тага <script>… </script>

Разликата между вграждането на кода в заглавана секция и в тялото е тази, че кода сложен в заглавната секция не се изпълнява докато не бъде извикан. Там най-често се поставят декларации на функции. Кода поставен в тялото на документа са изпълнява в реда в който е поставен. От тук може да се извикват функции, декларирани в заглавната секция.

Вграждане на външен файл:

<head>
  <script src="myscripts.js"></script>
</head> 

Променливи

По дефиниция променлива е „именувана област от паметта“, в която съхраняваме някаква стойност (контейнер за стойности в програмата). Имената на променливите се наричат идентификатори.

Променливите трябва да бъдат обявени (декларирани) преди да бъдат използвани.

Динамично типизиране

JavaScriptе нетипизиран език. Това означава, че променливата в JavaScriptможе да съдържа стойност от всеки тип данни. За разлика от много други езици, в JavaScript не е необходимо при деклариране на променлива, да се посочва какъв тип стойност ще съдържа тя. Типът на стойността на променлива може да се промени по време на изпълнението на програмата и JavaScript автоматично се грижи за нея. 

Тази функция се нарича динамично типизиране (dynamic typing).

Обхват на променливите

Обхватът на променливата е областта в програмата, в която е дефинирана и достъпна тя.
Традиционно, JavaScript определя само два обхвата – локален и глобален.

  • Локален обхват (Local Scope) – Променлива с локален обхват може да бъде достъпна само от функцията, в която е обявена.
// тук кода НЕ може да използва carName

function myFunction() {
    var carName = "Volvo";

    // тук кода МОЖЕ да използва carName

}
  • Глобален обхват (Global Scope) – Променлива с глобален обхват може да бъде достъпна от която и да е част в кода на JavaScript.
var carName = "Volvo";

// тук кода МОЖЕ да използва carName

function myFunction() {

    // тук кода също МОЖЕ да използва carName
}

Блоков обхват (The Block scope) в ES6

Блоковият обхват ограничава достъпа до променливата в рамките на блока, в който тя е декларирана.

Обхватът на блока ограничава достъпа на променливата до блока, в който е деклариран. Ключовата дума var задава обхват на променливата в рамките на функцията, в която е дефинирана. За разлика от нея, ключовата дума let позволява на скрипта да ограничи достъпа до променливата в рамките на най-близкия затворен блок.

Декларацията const създава обръщение само за четене към стойност. Това не означава, че стойността която притежава е неизменима, а само че идентификаторът на променливата не може да приеме друга стойност. Константите са с блоков обхват. Стойността на една константа не може да се промени чрез повторно задаване и тя не може да бъде обявена отново.

Следните правила важат за променлива, декларирана с помощта на ключовата дума const:

  • Стойността на константите не може да бъде променена.
  • Константата не може да бъде декларирана повторно.
  • Константата изисква инициализация. Това означава, че константите трябва да бъдат инициализирани по време на декларирането им.

var декларация

var x = 1;
{
  var x = 2;
}
console.log(x); // logs 2

В този пример резултата ще бъде „2“, защото var  декларацията в блока (заключен между къдравите скоби) има същия обхват, какъвто има и var декларацията преди блока.

Същият код в C или Java ще върне резултат „1“.

let и const декларация

let x = 1;
{
  let x = 2;
}
console.log(x); // logs 1

х=2 е ограничена в рамките на блока, в който е обявена.

Същият код е валиден с const декларация:

const c = 1;
{
  const c = 2;
}
console.log(c); /* logs 1 (и няма да предизвика ГРЕШКА поради повторното обявяване const = 2 в блока) */

                  

let и const не позволяват повторно деклариране!

?

какви ще бъдат стойностите на х и у след изпълнение на следния код:

var x = 1;
let y = 1;

if (true) {
  var x = 2;
  let y = 2;
}

console.log('x = ' + x);

console.log('y = ' + y);

>>Оператори в JavaScript