繁体   English   中英

如何更改 node.js 中 function 中的变量值?

[英]How can i change the value of a variable inside a function in node.js?

我试图使用 function 来更改节点 js 中变量的值。 我正在使用的恰好是异步函数,但我在常规(非异步)函数中也得到了相同的行为。

代码是

async function change_string(new_string){

new_string='goodbye';

}

async function main() {
    var new_string; 
    new_string='hello';
await change_string(new_string);
console.log(new_string);

}

main();

我希望控制台记录“再见”,但它正在记录“你好”。 javscript 函数的工作方式一定有一些我不明白的地方。 我需要专门返回 new_string 吗? 谢谢你。

首先,您要问的是所谓的“副作用编程”,您将其称为 function,它会更改 function 之外的一些变量。 出于各种充分的原因,这通常不是编程的好方法。 而且,如果您与异步操作一起执行此操作,那么这通常是一场灾难,因为您的 function 之外的事物何时发生变化以及其他人何时可以使用新值是完全未知和不可预测的。 所以,我的第一个建议是“不要这样编程”。

函数应该返回调用者可以使用的值或 promise。 或者,您可以使用方法创建 object,并且该方法可以修改该特定 object 的 state。

如果您有异步操作,那么您应该返回 promise 以便调用者知道异步操作何时完成或出现错误。 如果异步操作有“最终结果”,它应该是您返回的 promise 的解析值。

而且,我希望您意识到这些函数都不需要async ,因为它们不包含任何异步操作。

然后,最后,当您将字符串作为参数传递给 function 并且 function 更改该字符串时,它只是更改了参数,它不会更改您传递的原始变量。 这就是 Javascript 作为 function arguments 传递字符串或任何原语的工作原理。


如果您要创建副作用 function,那么您需要声明它将在更高的 scope 中更改的变量,这个 function 和其他人都可以使用它。 这是一个例子:

 let new_string = ""; async function change_string(){ new_string = 'goodbye'; } async function main() { new_string='hello'; await change_string(); console.log(new_string); } main();

我只是这样编码,因为这是你想要做的。 这不是编写任何代码的好方法。 由于这是一组代码,我不知道您要解决什么真正的问题,因此我们无法提供解决该问题的好方法。


我更希望看到您创建一个 function 来返回修改后的字符串(并删除不必要的async指定):

 // return modified string function change_string(existing_string){ return 'goodbye ' + existing_string; } function main() { let my_string = 'hello'; let new_string = change_string(my_string); console.log(new_string); } main();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM