簡體   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