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

投稿者: Anonymous

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

reversed = char + reversed;

_x000D_

_x000D_

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

_x000D_

_x000D_

_x000D_

解決

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

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

let reversed = "";

次に問題の for of です。

for (let char of str) {
    reversed = char + reversed;
}

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

char = "a", reversed = "a"

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

char = "b", reversed = "ba"

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

char = "c", reversed = "cba"

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

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *