JS Гинжин хамаарал буюу Scope, Scope Chain
Scope буюу Хамрах хүрээ нь Функц болон хувьсагчдын хамрах хүрээ (харагдах байдал) -ийг тодорхойлдог.
javaScript функцын хамрах хүрээ
JavaScript-д хоёр төрлийн хамрах хүрээ байдаг.
- Local буюу дотоодын хамрах хүрээ
- Global буюу нийтийн хамрах хүрээ
JavaScript-д функц бүр нь өөрийн гэсэн хамрах хүрээтэй байдаг. Хамрах хүрээ нь хувьсагчын харагдах байдалыг тодорхойлдог. Өөрөөр хэлбэл Функц дотор тодорхойлогдсон хувьсагчид функцийн гадна талаас хандах боломжгүй байдаг.
Local хувьсагч
JavaScript-д функц дотор зарласан хувьсагч нь Local орчинд буюу тухайн функцийн орчинд л ажиллах болно. Тухайн функц дотор зарласан хувьсагчид зөвхөн тухайн функц дотроос л хандах боломжтой юм.
Жишээ нь
/* phone хувьсагчид хандах боломжгүй */
function myFunc() {
var phone = "IPhone";
/* phone хувьсагчид хандах боломжтой */
}
Локал хувьсагчийг зөвхөн функц дотроос л хүлээн зөвшөөрдөг тул ижил нэртэй хувьсагчуудыг өөр өөр функцэд ашиглаж болно.
Local хувьсагчууд нь функц эхлэхэд үүсдэг бөгөөд функц дуусахад устгагдана.
Global хувьсагч
Функцийн гадна зарлагдсан хувьсагч GLOBAL болно. Глобал орчинд зарласан хувьсагчид Вэб хуудас дээрх бүх скриптүүд болон функцууд түүнд нэвтрэх боломжтой байдаг.
Жишээ нь
var phone = "IPhone";
/* phone хувьсагчид хандах боломжтой */
function myFunc() {
/* phone хувьсагчид хандах боломжтой */
}
Хувьсагч
JavaScript-д объект, функц нь мөн адил хувьсагч юм.
Scope буюу хамрах хүрээ нь кодын өөр хэсгүүдээс хувьсагч, объект, функцэд нэвтрэх боломжийг тодорхойлдог.
Автомат ГЛОБАЛ хувьсагч
Хэрэв зарлагдаагүй хувьсагчид утга олгох үед автоматаар шууд ГЛОБАЛ хувьсагч болдог.
Доорх жишээнд функц дотор зарлагдаагүй хувьсагчид утга өгч шалгаж үзье.
Жишээ нь
myFunc();
/* phnoeName нэртэй зарлагдаагүй хувьсагчид функц дотороос утга олгож байна. */
function myFunc() {
phoneName = "IPhone";
}
HTML дэхь ГЛОБАЛ хувьсагч
HTML-д ГЛОБАЛ орчины хувьсагч нь window-н обьект юм. Өөрөөр хэлбэл ГЛОБАЛ орчинд зарлагдсан бүх хувьсагч нь window объектод хамаарах болно.
Scope Chain буюу Гинжин хамаарал
Жишээ зургийг сайн ажиглацгаая.
Дээрх зурганд глобал орчинд ( a ) Хувьсагч зарласан байна.
Мөн first(), third() функцийг нэг түвшинд зарлаж first() функц дотор second() функц зарласан байгааг сайн ажиглаарай.
ГЛОБАЛ орчинд зарласан хувьсагчид функц дотороос шууд хандах боломжтой байдаг, харин ГЛОБАЛ орчиноос функц доторх хувьсагчид хандах боломжгүй гэдгийг бид өмнөх хичээл дээр үзсэн.
Дээрх зургийг дахин харцгаая. first() функц дотор second() функц зарласан байна.
Өөрөөр хэлбэл first() функцийн гадаад орчин нь ГЛОБАЛ орчин юм.
Харин second() функцийн гадаад орчин нь first() функц, first() функцийн гадаад орчин нь ГЛОБАЛ орчин юм.
Тэгэхлээр first() функцээс a, b хувьсагчид хандах боломжтой бөгөөд second() функцийн c хувьсагчид хандах боломжгүй юм.
second() функцээс ГЛОБАЛ орчны хувьсагч a, first() функцийн хувьсагч b болон c хувьсагчид хандах боломжтой гэсэн үг юм. Үүнийг Scope Chain буюу Гинжин Хамаарал гэж нэрлэдэг байна.
Зургийг цааш ажиглавал first() функцтэй ижил төвшинд зарласан third() функцээс a, b, c, d хувьсагчийн утгыг console.log-д хэвлэх комманд өгсөн байна. Гэвч энэ нь алдаа өгөх болно. Голбал орчны а хувьсагчид хандах боломжтой боловч b болон с хувьсагчид хандах боломжгүй юм.
Жишээ нь
var a = 'Hello!';
first();
function first() {
var b = 'Hi';
second();
function second() {
var c = 'Hey!';
third();
}
}
function third() {
var d = 'John';
console.log(c);
}
JavaScript хувьсагчийн амьдралын хугацаа
Хувьсагчийг зарлахад хувьсагчийн хугацаа эхэлдэг.
Функц ажиллаж дуусахад локал хувьсагчууд устдаг.
Вэб хөтөч эсвэл тухайн цонхыг хаахад глобал хувьсагчууд устдаг байна.
Функцийн аргументууд
Функцийн аргументууд (параметрүүд) нь функц доторх локал хувьсагч болж ажилладаг.