Я столкнулся с особенно интересным примером того, что, по моему мнению, является побочным эффектом в 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 связаны с областью, в которой они объявлены, а не с областью, которая их выполняет, даже если они передаются в эту область как первоклассные граждане?
Во-первых, небольшая проблема с тестом: вы не drSideEffect
функцию drSideEffect
в main
; вы его вызвали, затем передали его возвращаемое значение (ничего). firstClassFunction
не undefined
, а firstClassFunction
на отдельной строке - это не-op. Вместо этого назовите его main
:
firstClassFunction();
и передать функцию без ее вызова:
main(drSideEffect);
Результат будет таким же, хотя, поскольку youre right: функции наследуют область, в которой они определены, а не где они вызываются.