Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

letではなくconstで反復処理をする のタイトルと内容の組み合わせは意図的なものでしょうか #1288

Closed
kangetsu121 opened this issue Jan 27, 2021 · 3 comments · Fixed by #1501

Comments

@kangetsu121
Copy link
Contributor

kangetsu121 commented Jan 27, 2021

該当ページ

質問内容

タイトルが letではなくconstで反復処理をする となっていますが, この節の中では const を使うべき理由や, const を使った具体例の紹介はされていないように読めました。この節の目的が一見して自分にはわかりづらかったため, タイトルと内容の組み合わせが意図的なものか, 意図的な場合その意図を教えていただけるでしょうか。

@azu
Copy link
Collaborator

azu commented Jan 30, 2021

たしかにArray#reduceの話になっていてあんまりconst関係ない感じかもしれないですね。
意図しているのはletを使わない(再代入をしない)反復処理の方法なので、なにか別のタイトルか中身を分かりやすくした方が良さそうな気がしますね。

forを使うと次のように let total という感じで let で一時的な変数を定義しなくちゃいけなくなってしまいます。

再代入を禁止することで、ミスから発生するバグを減らすことが期待できます。 このため変数を宣言する場合には、まずconstで定義できないかを検討し、できない場合はletを使うことを推奨しています。
https://jsprimer.net/basic/variables/

と書いているように、できれば letvar を使わない(再代入できない状態)方が、再代入による意図しない値の上書きなどが発生しにくいので、その方法について書いているというコラムですね。
reduceメソッド自体があんまり直感的ではないので、本文ではなくコラムに置いているという形だったと思います。
(sum関数のようにスコープが小さければ、letでそこまで問題がおきるわけじゃないので、推奨ってほどでもないという意味合いですね)

function sum(numbers) {
    let total = 0;
    for (let i = 0; i < numbers.length; i++) {
        total += numbers[i];
    }
    return total;
}

console.log(sum([1, 2, 3, 4, 5])); // => 15

@kangetsu121
Copy link
Contributor Author

解説いただきありがとうございます!

意図しているのはletを使わない(再代入をしない)反復処理の方法なので、なにか別のタイトルか中身を分かりやすくした方が良さそうな気がしますね。

こちら, (私の問題もあると思いますが) この節を読んだ後にタイトルと見比べ, 「つまり何を説明しているのだっけ, const はどこに出てきたかな」となってしまったので, よろしければご検討よろしくお願いします。

@azu
Copy link
Collaborator

azu commented Oct 6, 2022

JavaScript のクロージャーと for 文の let 初期化の例外
もう少し詳しい仕様的な解説

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants