Повдигат ли се декларациите на класове в JavaScript?

Здравейте, колеги ентусиасти на JavaScript! Управлявам бизнес с доставчик на повдигане и днес искам да се потопя дълбоко в една супер интересна тема в JavaScript: Повдигат ли се декларациите на класове?

Първо, нека бързо да разгледаме какво е повдигане. В JavaScript повдигането е поведение, при което декларациите на променливи и функции се преместват в горната част на техния обхват на съдържание по време на фазата на компилиране. Това означава, че можете да използвате променлива или да извикате функция, преди тя действително да е декларирана във вашия код. Например, с декларации на функции това работи добре:

sayHello(); функция sayHello() { console.log('Здравей!'); }

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

Сега нека поговорим за променливите. Има два основни начина за деклариране на променливи в JavaScript: използваненашияти използваненекаиликонст. Когато използватенашият, повдигането се държи малко по-различно. Помислете за този код:

console.log(myVar); var myVar = 'Аз съм променлива';

Този код ще се отпечатанедефиниранвместо да хвърляте aReferenceError. Това е така, защотонашиятдекларацията е повдигната, но присвояването не е. И така, в момента се опитваме да влеземmyVar, съществува в обхвата, но иманедефиниранстойност.

От друга страна, когато използватенекаиликонст, нещата са различни. Вижте този код:

console.log(myLetVar); let myLetVar = 'Аз съм променлива let';

Този код ще хвърли aReferenceErrorзащотонекаиконстдекларациите се повдигат, но те са във „времева мъртва зона“, докато действителната декларация не бъде достигната при изпълнението на кода.

И така, къде се вписват декларациите на класове във всичко това? Е, декларациите на класове в JavaScript не се издигат по същия начин като декларациите на функции. Разгледайте този код:

нека myClassInstance = нов MyClass(); class MyClass { constructor() { console.log('Създаден екземпляр на MyClass'); }}

Ако изпълните този код, ще получите aReferenceErrorзащото се опитвате да създадете екземпляр наMyClassпреди класът да бъде деклариран. Декларациите на класове са издигнати до върха на техния обхват, но те са във времева мъртва зона точно катонекаиконстпроменливи. Не можете да получите достъп или да използвате клас, докато не бъде изпълнена неговата декларация.

Класовите изрази обаче са малко по-различни. Помислете за този код:

нека myClassExpression = нов MyClassExpression(); let MyClassExpression = class { constructor() { console.log('Създаден екземпляр на MyClassExpression'); } };

Този код също ще хвърли aReferenceErrorтъй като променливатаMyClassExpressionсе декларира снекаи е във времевата мъртва зона до достигане на оператора за присвояване.

Сега може би се чудите защо съществува тази разлика в поведението при повдигане. Е, това е главно в името на четливостта на кода и поддръжката. Като не ви позволява да използвате клас, преди да е деклариран, JavaScript налага по-логичен поток във вашия код. Това изяснява, че първо трябва да дефинирате вашите класове, преди да можете да ги използвате, което помага за предотвратяване на проблеми, трудни за отстраняване на грешки.

steel structure constructionsteel frame construction

Като доставчик на подемни машини видях как разбирането на тези концепции може да направи огромна разлика в развитието на JavaScript. Независимо дали създавате проста уеб страница или сложно уеб приложение, правилното повдигане може да ви спести много време и главоболия.

Сега нека поговорим за някои приложения от реалния свят. В широкомащабни JavaScript проекти, особено тези, които използват съвременни рамки като React или Vue, класовете често се използват за дефиниране на компоненти. Разбирането, че декларациите на класове не се повдигат, означава, че трябва внимателно да структурирате кода си. Трябва да се уверите, че всички ваши дефиниции на клас идват, преди да опитате да ги използвате.

Например, ако изграждате aРамкова стоманена сградаприложение за управление в JavaScript и имате класове за представяне на различни части на сградата, като подове, стаи и структурни елементи, трябва да дефинирате тези класове в правилния ред. В противен случай ще попаднете на грешки, когато се опитате да създадете екземпляри на тези класове.

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

И ако имате работа сСглобяеми многоетажни стоманени конструкции по жилищни чертежи, се прилагат същите принципи. Вашият код трябва да е добре организиран и трябва да спазвате правилата за повдигане за класове, за да осигурите гладка работа.

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

Ако сте разработчик или бизнес, който иска да оптимизира вашите JavaScript проекти и се нуждаете от помощ при проблеми, свързани с повдигане, или ако се интересувате от нашите услуги за повдигане, ще се радвам да поговорим с вас. Независимо дали става въпрос за отстраняване на грешки, свързани с повдигане, или планиране на структурата на вашия код според тези правила, ние сме тук, за да ви помогнем. Просто протегнете ръка и можем да започнем ползотворна дискусия за това как можем да работим заедно, за да направим вашите проекти още по-добри.

препратки:

  • JavaScript: Окончателното ръководство от Дейвид Фланаган
  • Красноречив JavaScript от Marijn Haverbeke

Изпрати запитване