2019年10月31日木曜日

【JavaScript】関数内でconstで宣言された変数は、次の関数呼び出しで変更できる

JavaScriptのconstの使い方について気になって調べたのでメモ。

ポイント

関数内でconstで宣言された変数は、次の関数呼び出しで変更できる

【問題】
ある関数内で、変数をエイリアスとして使用することを考える。
例えば、以下のような感じ。
  1. function tmp() {
  2. const arrayLength= array.length;
  3. console.log(arrayLength);
  4. }
配列の長さが変わった際に、再度この関数が呼び出されるとどうなるのか。
このconstが「関数の呼び出しのたびに毎回値を設定します」ということであれば望む結果が得られるだろうが、もし仮に、「関数の最初の呼び出しで決まり、それ以降の呼び出しでは変更できません」だと困ったことになる。
C++を扱った感覚では、前者の動作が当然のように思われるが、気になってしまった以上調べないわけにはいかない。

【答え】
ちゃんと再設定される。

開発・実行環境

ブラウザ Google Chrome
バージョン: 78.0.3904.70(Official Build) (64 ビット)
起動時オプション:
--flag-switches-begin --flag-switches-end

PC
プロセッサ: Intel(R) Core(TM) i5-5200U CPU @2.20GHz
メモリ: 8.00 GB
OS: Windows 8.1 (64bit)
compiler: Microsoft (R) C/C++ Optimizing Compiler Version 19.00.24215.1 for x86

コード

test.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charser="utf-8" />
  5. <title>Odonata Bug Hunt Blog</title>
  6. <link rel="manifest" href="/manifest.json">
  7. <script type="text/javascript">
  8. var lastValue=0;
  9. const addOne = () => {
  10. const constValue=lastValue+1;
  11. // constValue = 1; // This code become an error.
  12. var elem = document.getElementById("id_value");
  13. elem.innerText = constValue;
  14. lastValue = constValue;
  15. };
  16. </script>
  17. </head>
  18. <body>
  19. <input type="button" value="Increment" onclick="addOne();"><br />
  20. value: <span id="id_value"></span><br />
  21. </body>
  22. </html>

lastValueは数を保存しておくためのグローバル変数だ。
constValueはlastValueに1を加えた値を入れておくための変数で、関数呼び出しのたびに更新さる。
ボタンクリックで関数が呼ばれる。

実行結果

Odonata Bug Hunt Blog
value:

(私の環境では更新されています)

0 件のコメント:

コメントを投稿

コメント表示は承認制に設定しています