You are on page 1of 17

Функцийн үүсгэх болон ажиллуулах шатууд, hoisting

execution context гэдэг бол кодын ажиллах орчин бол execution stack бол түүнийг агуулж
буй санах ойн тусгай орон зайн хэсгийг хэлж байна.

execution context бүр үүсэх болон ажиллах гэсэн 2 хэсгээс бүрдэж ажилладаг.
execution context нь дотроо 3 хэсгээс тогтоно.

1. variable objects буюу хувьсагч объект


2. this заагч буюу уг функцийг агуулж буй обьектийг нь зааж буй заагч

3. scop chain буюу уг функцийг агуулж буй гаднах функцийн, түүнийг агуулж буй гаднах
функц гэх мэтчилэн өөрөөс нь гадагш байх бүх функцийн хувьсагчид болон
функцтай гинжин байдлаар холбогдсон байдлыг хэлж байгаа бөгөөд тэр гинжин
холбоог нь энэ хэсэг дотор үүсгэж өгдөг.

execution нь программыг ажиллуух гэсэн утгатай.дээрээс нь доошоо чиглэлтэй ажиллуулна.

Hoist хийх
бид JS -ын ямар нэг код жишээ нь app.js гэх мэт. бичих үед тэр нь хардан дээр байдаг.Гэтэл
хард бол комьютеры хамгийн удаан ажилладаг хэсэг бөгөөд унтраад асах үед мэдээллээ
хадгалж байдаг төхөөрөмж юм.Бидний бичсэн html,css,js бүгд хард дээр байрладаг.

Дараа нь яг ажиллах үед тухайн хард дээр байгаа файлыг javascript engine маань scan хийж
анализ хийгээд санах ойд байрлуулдаг байна.(санах ой бол хардаас олон 1000 дахин
хурдтай агуулах орон зай юм.Ажиллаж байгаа программ бүр зайлшгүй санах ойд байрласан
байх ёстой байдаг.)

яг бүр ажиллалуулах агшинд санах ойгоос аваад процессор(CPU) луу хийдэг байна.CPU бүр
хурдан ажилладаг.Тэгэхээр программ маань HARD--->RAM--->CPU гэсэн дараалалтай
ажилладаг.

өргөх гэдэг нь удаан ажиллаж байгаа төхөөрөмжөөс санах ой руу өргөж оруулж байна гэж
ойлгож болно үүнийг hoisting гэдэг.

Функцийн дотор системийн тусгай arguments гэдэг хувьсагчийг үүсгэдэг.Үүнийг javascript


engine үүсгэж өгдөг.Функц бүрт зайлшгүй нэг arguments гэдэг хувьсагч үүсдэг.

жишээ нь функц руу 3 аргумент дамжуулах үед тэр 3 утга маань arguments гэсэн системийн
тусгай массив төрлийн хувьсагч дотор массивын элеминт хэлбэртэйгээр орж ирдэг.Тэгэхээр
функц руу дамжуулсан утгуудыг ганцхан хувьсагч дотроос олох боломжийг javascript
олгодог бөгөөд тэр хувьсагчийн нэрийг arguments гэдэг.
Энэ хувьсагч нь javascript-ыг бас гайхалтай динамик код бичих боломжийг олгодог.

глобаль context -ын хувьсагчийн объект дотор үүсгэлтийн шатан дахь үйл явц.

яагаад функц B бол y гэсэн хувьсагч ороогүй вэ гэвэл энэ нь функц A - ийн execution context
дотор харагдана. Өөрөөр хэлбэл санах ойн өөр өөр хэсэгт байрлана гэсэн үг.

x, функц A, функц C 3 глобаль context -ын variable object хэсэгт байна.функц A,функц B 2 нь
функцийнхаа кодтойгоо хамт байх боловч код нь харагдахгүй .

Эндээс харахад яагаад B функцийг дуудаж болохгүй вэ гэдэг нь тодорхой болж байна.Учир
нь execution context дотор нь B байхгүй.
hoisting хийцэн учир функц бичигдэхээс өмнө дуудахад ажиллаж байна.hoisting хийгээд
байгаа шалтгаан нь программ ажиллах шатанд энэ функц, хувьсагч байна уу гэж дахиж
шалгаж удахгүй нь тулд л хийгээд байгаа юм.Нэгэнт үүсгээд байршуулчихсан учир X ийг
зарласан байна уу үгүй юу гэдгийг хайж удахгүйгээр шууд X() -ийг дуудаад ажиллуулж болж
байна.
x-д нь зүгээр л function гэдэг утга өгцөн үүнийг хувьсагч л гэж ойлгоно.

function expression хэлбэрээр зарласан функцийг кодынх нь доор дуудах үед асуудалгүй
ажиллаж байна.
дээр нь дуудах үед алдаа зааж байна.У бол функц биш гэж байна.Яагаад гэвэл execution
context дотор у-ийг хувьсагч гээд үүсгэлтийн шатанд үүсгэчихсэн байгаа.

доор нь дуудах үед болж байгаа шалтгаан нь гэвэл ажиллуулах шатанд ирээд y = function(){
console.log('y is function expression...')

гэсэн утгыг өгчихөж байгаа учир.Одоо Y нь undefined байхаа больсон гэсэн үг.
expression ийг хувьсагч гэдэг онцлогоос нь болоод бид үүнийг зарлалтынхаа дээр нь дуудаж
болдоггүй юм байна.

тэгвэл expression байх шаардлага байгаа юм уу гэсэн асуулт гарч ирж болох юм.

Энэ нь javascript 1.0 хувилбараас эхлэн одоо хүртэл байж байгаа зарлалт юм.Энэ зарлалтын
ачаар бид хувьсагчид функцийг өгч байна.

функцад функцийг дамжуулж өгч болж байна.


x гэдэг функц ажиллах үед түүний execution context үүснэ.Тэгээд дотор нь a гэдэг хувьсагч
байгааг олж мэднэ.Тэгээд a = undefined гэсэн утгатайгаар үүсгэнэ.

Тэгээд эхлээд x() дуудахад үүнд ямар нэгэн аргумент дамжуулж өгөөгүй учир а нь undefined
утгатайгаа хэвлэгдээд байна.

харин x(1) гэж дуудахад a = 1 гэдэг утгыг оноож байна гэсэн үг.
функц руу функц дамжуулж байна.Энэ нь ихэнх програмчлалын хэлэнд байдаггүй.Зөвхөн
функциональ хандалттай програмчлалын хэлүүдэд байдаг.
х функц нь a гэдэг зүйлийг параметрээр аваад a гэдэг параметрыгээ функцээр дуудаж
байна.

a параметрээр ямар ч функц дамжин орж ирсэн бай тэр функцийг дуудаж чадна гэсэн үг.

өөрөөр хэлбэл жишээ нь дээрээс харахад x(y) гээд дамжуулах үед a гэдэг параметрээр
дамжиж ороод тэгээд шаал өөр нэртэй буюу a гэсэн нэртэйгээр ажиллуулж байна.
ерөөсөө л x функц руу дурын функц дамжуулаад үүнийгээ түүн дотор ажиллуулж болно.Энэ
бол програмчлалын кодыг асар бага болгох боломжийг олгодог.

ийм учраас л function expression бол маш хэрэгтэй зарлалт юм.Javascript-ийг хүчтэй болгож
байгаа нэг зүйл.

javascript engine ий үүсгэж өгсөн arguments гэдэг хувьсагчийг хэвлэж үзвэл.Энэ нь обьект
болох нь харагдаж байна. дөрвөн ширхэг элеминттэй.

You might also like