Что именно означает понятие лексического контекста в JavaScript?

У меня есть следующие сомнения относительно точного значения понятия лексической области видимости в JavaScript.

Итак, из того, что я понял, это можно объяснить:

void fun()
{
    int x = 5;

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

показывая, что любой внутренний уровень может обращаться к переменным своих внешних уровней.

Так это понятие лексической сферы? Если да, то почему он называется lxical? что именно значит?

2 ответа

Даже если опубликованный вами код не является JavaScript, вы по сути правы. function () { … } создает область действия, и "внутренняя внутренняя область" может получить доступ к переменным из "внешнего"

var a = 10, b = 20;

(function () {
    var b = 100;
    console.log(a); //10
    console.log(b); //100

    (function() {
        var c = 333;
    })();

    console.log(c) //undefined
})();

Следует отметить, что область действия, в которой определена функция, сохраняется вместе с функцией. Это означает:

function A (a) {
    var b = 100;

    return function (c) {
        console.log(a, b, c);
    }
}

var afx = A(10);
afx(666); //10, 100, 666;

Тем не менее, Javascript не предоставляет блокоскоп. Так:

for (var i = 0; i < 10; i++) { … }
console.log(i) //9

переменная не "ограничена" блоком.

НО ES6 и новое ключевое слово let, чтобы определить переменные, измените это. Так:

for (let i = 0; i < 10; i++) { … }
console.log(i); // ReferenceError: i is not defined (using babel to transpile)

Таким образом, в будущих версиях JS также возможно Blockscoping, как это:

{
    let i = '#';
    console.log(i); //#
}
console.log(i); // ReferenceError: i is not defined

Лексическая область видимости не зависит от контекста выполнения, как в вашем примере.

Динамическая область будет зависеть от контекста, в котором выполняется функция:

this.word = 'hello';
function saySomething() {
  console.log(this.word);
}

saySomething(); // "hello"

var otherContext = {
    word : "bye"
}

saySomething.call(otherContext); // "bye"
Другие вопросы по тегам