Понимание «побочных эффектов» в Javascript с учетом функций первого класса

1

Я столкнулся с особенно интересным примером того, что, по моему мнению, является побочным эффектом в Javascript.

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

Сделайте ссылку на следующий код:

let mrGlobal = "mrGlobal";
let drSideEffect = function() {
   mrGlobal = "mrGlobal has been acting weird lately";
}

function main(firstClassFunction) {
   let mrGlobal = "mrGlobal: version 2.";
   firstClassFunction
   console.log(mrGlobal)                    //First console.log
}
main(drSideEffect());
console.log(mrGlobal)                      //Second console.log

В случае первого consol.log выход: mrGlobal version 2.
В случае второго consol.log выход: mrGlobal в последнее время действует странно

Первоначально я думал, что это приведет к поведению opppsite (первый console.log был включен со вторым console.log), поэтому этот результат меня удивил. Я предполагаю, что это связано с тем, что функции в javascript связаны с областью, в которой они объявлены, а не с областью, которая их выполняет, даже если они передаются в эту область как первоклассные граждане?

Теги:
scope
first-class-functions

1 ответ

0

Во-первых, небольшая проблема с тестом: вы не drSideEffect функцию drSideEffect в main; вы его вызвали, затем передали его возвращаемое значение (ничего). firstClassFunction не undefined, а firstClassFunction на отдельной строке - это не-op. Вместо этого назовите его main:

firstClassFunction();

и передать функцию без ее вызова:

main(drSideEffect);

Результат будет таким же, хотя, поскольку youre right: функции наследуют область, в которой они определены, а не где они вызываются.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню