我遇到了一個特別有趣的例子,我認爲這是Javascript中的副作用。瞭解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版本2.
在第二consol.log的輸出的情況下是:最近mrGlobal一直很奇怪
我最初認爲這會導致opppsite行爲(第一個console.log與第二個console.log切換),所以這個輸出令我感到吃驚。我假設這是因爲JavaScript中的函數綁定到它們聲明的範圍,而不是執行它們的範圍 - 即使它們作爲一等公民被傳遞到該範圍內?
另請參見https://stackoverflow.com/questions/44146107/inject-variables-into-function-scope –
是的,原因是詞法範圍。這與一流的功能無關。 – Bergi