ცვლადების ხედვის არე

სწვალა

ჯავასკრიპტში ყველა პარამეტრს აქვს გარკვეული ხედვის არე, რომლის ფარგლებშიც ისინი მოქმედებენ.

გლობალური ცვლადები

ყველა ცვლადი, რომელიც გამოცხადებულია ფუნქციის გარეთ, არის გლობალური:

<!DOCTYPE html>
<html>
<head>
<meta charset=”utf-8″ />
</head>
<body>
<script>
var x = 5;
function displaySquare() {
var z = x * x;
console.log(z);
}
</script>
</body>
</html>

აქ ცვლადი x არის გლობალური, მასზე მიმართვა შეიძლება პროგრამის ნებისმიერი ადგილიდან. ხოლო ცვლადი z არაა გლობალური, რადგანაც გამოცხადებულია ფუნქციის შიგნით.

ლოკალური ცვლადები

ცვლადი, რომელიც გამოცხადებულია ფუნქციის შიგნით, წარმოადგენს ლოკალურ ცვლადს:

function displaySquare() {
var z = 10;
console.log(z);
}

ცვლადი z ლოკალურია და ის არსებობს მხოლოდ ფუნქციის შიგნით. ფუნქციის გარეთ მისი გამოყენება არ შეიძლება:

function displaySquare() {
var z = 10;
console.log(z);
}

console.log(z); // შეცდომაა, რადგან z არ არსებობს

როცა ფუნქცია ასრულებს მუშაობას, ყველა ცვლადი, შექმნილი ფუნქციის სიგნით, ნადგურდება.

საჭიროა გავითვალისწინთ, რომ სიტყვა var განუსაზღვრავს ცვლადს ლოკალურ არეს. მის გარეშე მივიღებთ გლობალურ ცვლადს. მაგალითად:

function bar(){
foo = “25”;}
bar();
console.log(foo); // 25

მიუხედავად იმისა, რომ foo ცვლადი ფუნქციის გარეთ არსად არ გვხვდება, იგი გლობალურია და მისი გამოყენებაფუნქციის გარეთ შესაძლებელია. თუ გამოვიყენებთ სიტყვას var (ანუ გამოვაცხადებთ ცვლადს), მაშინ იგი იქნება ლოკალური და მისი გამოყენება ფუნქციის გარეთ იქნება შეუძლებელი:

function bar(){
var foo = “25”;}
bar();
console.log(foo); // შეცდომა

strict mode

ფუნქციის შიგნით გლობალური ცვლადების განსაზღვრამ შეიძლება გაზარდოს შეცდომის რისკი. ამის თავიდან ასაცილებლად გამოიყენება მკაცრი რეჟიმი, ანუ strict mode:

“use strict”;
function bar() {
foo = “25”;
}
bar();
console.log(foo);

ამ შემთხვევაში ჩვენ მივიღებთ შეცდომას: SyntaxError: Unexpected identifier, რაც იმაზე მიუთითებს, რომ ცვლადი foo არაა განსაზღვრული.

strict mode შეიძლება დავაყენოთ ორი ხერხით:

დავამატოთ გამოსახულება “strict mode” ჯავასკრიპტის კოდის დასაწყისში;
დავამატოთ გამოსახულება “strict mode” ფუნქციის ტანის დასაწყისში. ამ შემთხვევაში, მკაცრი რეჟიმი იქნება გამოყენებული მხოლოდ ამ ფუნქციაში.
ცვლადების გადაფარვა

რა მოხდება, თუ გვაქვს ორი ცვლადი – ერთი გლობალური, ხოლო მეორე – ლოკალური, რომელთაც გააჩნიათ ერთი და იგივე სახელი:

var z = 89;
function displaySquare() {
var z = 10;
console.log(z); // 10
}
displaySquare(); // 10

ამ შემთხვევაში ფუნქციის შიგნით ლოკალური ცვლადი გადაფარავს გლობალურს და ფუნქციის შიგნით გამოიყენებს ლოკალურ ცვლადს.

თვითშესრულებადი ფუნქციები (IIFE)

როგორც წესი, ფუნქციის განსაზღვრა და მისი გამოძახება ერთმანეთისგან გამოყოფილია. ჯერ განისაზღვრება ფუნქცია, ხოლო შემდეგ ხდება მისი გამოძახება საჭირო ადგილას. მაგრამ ეს აუცილებელი არ არის. ჩვენ ასევე შეგვიძლია შევქმნათ ფუნქციებიუ, რომლებიც განსაზღვრისთანავე ამუშავდებიან. ასეთ ფუნქციებს მეორენაირად უწოდებენ Immediately Invoked Function Expression (IIFE).

(function () {
console.log(“გამარჯობა, სამყაროვ!”);
}());

(function (n) {
var result = 1;
for (var i = 1; i <= n; i++)
result *= i;
console.log(n + ” -ის ფაქტორიალი არის ” + result);
}(4));

ასეთი ფუნქციები მოთავსებულია ფრჩხილებში და ფუნქციის განსაზღვრის შემდეგ მაშინვე მოდის ფრჩხილებში პარამეტრების გადაცემა.

წყარო:webschool.ge

0Shares