С въвеждането на синтаксиса на ES 6 един от най-честите въпроси, които възникват, е разликата между Const, Let и Var. Въпреки че изглежда просто, има още нещо, което прави огромна разлика в основите на Javascript. Променливите са контейнери за всички типове данни, примитивни и непримитивни. Преди да се задълбочим в разликите, е важно да знаем разликите между декларация, инициализация, присвояване на променливи, обхвати и повдигане.
Декларация е, когато променлива е регистрирана с дадено име в съответния обхват. След това се инициализира, където се разпределя памет за съхраняване на променливата, където е недефинирана. Присвояванетосе случва, когато е дефинирано към тип данни.
var Hello //=> undefined (Declaration and Initialization) Hello = "Hello World" //=> "Hello World" (Assignment)
Обхват е мястото, където променливите и функциите са достъпни в приложението ви. В програмирането има лексикален обхват срещу динамичен обхват. Вероятно ще вляза в това в бъдещ блог. В Javascript, лексикален, има много обхвати като глобален, функционален, блоков и локален. И накрая, повдигане е стойността или поведението по подразбиране на декларираната променлива. В Javascript, ако дадена променлива е декларирана и инициализирана, без да бъде присвоена, тя е недефинирана.
Вар.
Преди въвеждането на ES6, var беше начинът за деклариране на променливи. Var е с функционален обхват и понякога е глобален, ако е дефиниран извън контекста на функция; но не и блоков обхват. Променливата, декларирана във функция, е достъпна само в рамките на тази функция или във всички функции, вложени в нея. Ако се опитате да получите достъп до променлива във функция, ще получите Uncaught Reference Error.
sayHello = () => { var hello = "hello world" return hello } console.log(hello) //=> "Uncaught ReferenceError: hello is not defined"
Нека
Нека, за разлика от var е блокиран обхват и може да се декларира само локално. Ако е деклариран извън функцията, може да бъде достъпен глобално; но ако е в рамките на функция, може да бъде достъпен само ако извикате тази функция. След като една променлива е декларирана и присвоена с помощта на „let“, тя може да бъде присвоена отново, но не може да бъде предекларирана. Ще получите Синтактична грешка.
let apples = "apples" apples = "oranges" let apples = "oranges //=> SyntaxError: Identifier 'apples' has already been declared
Конст
Const също е блокиран обхват. Когато нещо е декларирано с помощта на const, то не може да бъде декларирано отново и ще получите грешка при типа. Използва се само когато дадена стойност не трябва да се променя.
const apples = "apples" apples = "oranges" //=> TypeError: Assignment to constant variable
Той се държи различно, когато обектите са декларирани с const. Въпреки че обектът не може да бъде преназначен, стойностите в него могат.
const location = { country: "US", city: "New York" } location = { country: "China", city: "Hong Kong" } //=> TypeError: Assignment to constant variable location.country = "China" location = {country: "China", city: "New York}
Защо да използвате Const и Let over Var?
Една от основните разлики, поради които Const и Let се предпочитат пред Var, е, че те са по-малко податливи на грешки поради ограничения обхват. Освен това го прави много по-четлив, когато се споделя с други разработчици. Използвайте Const само когато знаете, че променливата не трябва да се променя.