Курс 12. Каждый вызов функции имеет и область видимости, и переменную this, и контекст выполнения.

В связи с этим сделать домашнее задание.

Для чего нужно разобраться с этими моментами?
Понятия области видимости и контекста выполнения очень важны и играют значительную роль в языке JavaScript. Их хорошее понимание важно для изучения ряда шаблонов проектирования, понимания работы замыканий, функций обратного вызова, частичного применения функций и других важных концепций JavaScrip.

Само домашнее задание:

1. Написать функции и переменные глобальной и локальной видимости.
Прописать почему и правило от которого вы отталкиваетесь.

2. Написать функции с локальной видимостью.

3. Практически сделать задание:

Обратите внимание в строке
alert(sum + assa);
код вызывает ошибку, объяснить почему.
Переписать код таким образом, что бы получить на выходе 16.
саму переменную assa можно изменять, то есть вы можете дописать функцию или переопределить, в общем код должен заработать, знаю немного преждевременно, но смотрите с точки зрения областей видимости.
var agent_ss = 5;
function foo(a, b) {
    var sum = a + b; // локальная видимость
    alert(sum + assa);
    //alert(this);
}

function mar() {
    var assa = 6;
}

foo(5, 5, 7, 12 ); // числа - это аргументы

Помните главное в этом уроке и в домашнем задании твёрдо разобраться, что происходит с функцией на этапе вызова функции и на этапе выполнения, если вы внимательно смотрели курс, то вы увидели, что вызов и выполнение это разные этапы, а конкретно выполнение и включает в себя контекст вызова и что этот аткео вы изучили.

Домашнее задание сбросить сюда же в форум, либо прикрепить. Если прикрепляете файл, то прикрепляйте рабочий, что бы можно было вставить код и посмотреть работу(комментируйте обильно).

Ещё одна часть домашнего задания, что бы поразмышлять.
Когда в функцию ffgg мы добавили alert(this + 'что это такое');
Код отработал. Очевидно, что видимость локальная самой функции, но this отработал глобально -
ПОЧЕМУ? Дайте свои пояснения желательно с кодом. Может дело в самой this? Жду ваших ответов.

var agent_ss = 5; // глобальный контекст выполнения
function foo(a, b) { // контекст выполнения функции
    var hello = 'hello';
    var sum = a + b; // локальная видимость
    alert(sum);
    alert(this);

    var funchello = function () {
        return hello;
    };

    var ffgg = function () {
        console.log(agent_ss + ',' + hello + ',' + funchello())
        alert(this + 'что это такое');
    };
    ffgg();
}

function mar() {
    var assa = 6;
}

foo(5, 5, 7, 12 ); // числа - это аргументы
Edited 30 Aug, 2017 10:57