gpt4 book ai didi

javascript - 理解 Javascript 中的 "Side Effects"与一等函数的关系

转载 作者:行者123 更新时间:2023-11-28 04:34:55 25 4
gpt4 key购买 nike

我遇到了一个特别有趣的案例,我认为这是 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 中的函数绑定(bind)到它们声明的作用域而不是执行它们的作用域 - 即使它们作为一等公民传递到该作用域?

最佳答案

首先,测试有一个小问题:你没有将函数 drSideEffect 传递到 main 中;你调用它,然后传递它的返回值(什么也没有)。 firstClassFunction未定义,并且单独一行上的 firstClassFunction 是无操作。相反,在 main 中调用它:

firstClassFunction();

并传递函数而不调用它:

main(drSideEffect);

不过,结果是一样的,因为你是对的:函数继承定义它们的作用域,而不是调用它们的作用域。

关于javascript - 理解 Javascript 中的 "Side Effects"与一等函数的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44296786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com