Lexical scope là gì?

Phrase Programming
static scope

Trong lexical scope, khi ta truy cập / truy xuất một biến (variable), giá trị của biến đó được tìm bằng cách tìm kiếm trong hàm (function) chứa biến đó và nếu không tìm thấy thì tìm kiếm trong outer function và cứ tiếp tục như vậy. Nói một cách đơn giản hơn là lexical scope có nghĩa là trong một nhóm hàm lồng nhau (nested function), các inner function có quyền truy cập vào các biến (variable) trong outer function.


void fun()
{
    int x = 5;

    void fun2()
    {
        printf("%d", x);
    }
}

Trong ví dụ ta thấy hàm fun2 (inner function) truy cập biến x, để biết giá trị của biến x đầu tiên chương trình tìm giá trị của biến x trong hàm fun2 (inner function) nhưng không tìm thấy nên tiếp theo chương trình tìm trong hàm fun (outer function), lần này tìm thấy biến x và có giá trị bằng 5.

Giờ chúng ta sẽ lấy một ví dụ khác trong C:


int x = 50;
int fun2(){
    return x;
}
int fun1(){
    int x = 10;
    int y = fun2();
    return y;
}

int main()
{
    printf("%d",fun1());

    return 0;
}

Trong code trên ta thấy hàm fun1 gọi hàm fun2. Ở đây chúng ta chú ý đến giá trị trả về của hàm fun2 tức là trả về giá trị của biến x. Do lexical scope, nên để tìm được giá trị của x trong hàm fun2, đầu tiên chương trình sẽ tìm định nghĩa biến x trong hàm fun2, chúng ta thấy bên trong hàm fun2 không có định nghĩa x, nên tiếp theo chương trình sẽ tìm định nghĩa của x ở outer function tức là hàm main nhưng trong hàm main không có định nghĩa biến x nên chương trình tìm bên ngoài hàm main và lần này nó tìm thấy định nghĩa của biến x có giá trị bằng 50 (câu lệnh int x = 50;). Xem thêm dynamic scope.

Learning English Everyday