for of を使ったReverse Stringの挙動が分からない


以下のラインでなぜ `abc` という文字列が `cba` と逆になるのか理解できません。

`reversed = char + reversed;`

[code]

    function reverse(str) {
        let reversed = "";
        for (let char of str) {
            reversed = char + reversed;
        }
        return reversed;
    };
    
    console.log(reverse("abc"));
[/code]




「例示は理解の試金石」です。実際にこの関数がどのように動いているのか、各変数の内容を追いながら確かめてみましょう。

まず最初に変数 `reversed` は空文字列 `""` で初期化されます。

[code]

    let reversed = "";
    
[/code]

次に問題の for of です。

[code]

    for (let char of str) {
        reversed = char + reversed;
    }
    
[/code]

最初のループでは、`str` の最初のコードポイントである `"a"` が変数 `char` に代入されます。そして `char +
reversed`、つまり `"a" + ""` が新しく `reversed` に代入されます。

[code]

    char = "a", reversed = "a"
    
[/code]

次のループでは `str` の次のコードポイントである `"b"` が変数 `char` に代入され、`"b" + "a"` が `reversed`
に代入されます。

[code]

    char = "b", reversed = "ba"
    
[/code]

次のループでは `"c"` が `char` に代入され、`"c" + "ba"` が `reversed` に代入されます。

[code]

    char = "c", reversed = "cba"
    
[/code]

これでループから抜けます。最後に `return reversed` ということで `"cba"` が返されます。




「例示は理解の試金石」です。実際にこの関数がどのように動いているのか、各変数の内容を追いながら確かめてみましょう。

まず最初に変数 `reversed` は空文字列 `""` で初期化されます。

[code]

    let reversed = "";
    
[/code]

次に問題の for of です。

[code]

    for (let char of str) {
        reversed = char + reversed;
    }
    
[/code]

最初のループでは、`str` の最初のコードポイントである `"a"` が変数 `char` に代入されます。そして `char +
reversed`、つまり `"a" + ""` が新しく `reversed` に代入されます。

[code]

    char = "a", reversed = "a"
    
[/code]

次のループでは `str` の次のコードポイントである `"b"` が変数 `char` に代入され、`"b" + "a"` が `reversed`
に代入されます。

[code]

    char = "b", reversed = "ba"
    
[/code]

次のループでは `"c"` が `char` に代入され、`"c" + "ba"` が `reversed` に代入されます。

[code]

    char = "c", reversed = "cba"
    
[/code]

これでループから抜けます。最後に `return reversed` ということで `"cba"` が返されます。

