ポイント
関数内でconstで宣言された変数は、次の関数呼び出しで変更できる
【問題】ある関数内で、変数をエイリアスとして使用することを考える。
例えば、以下のような感じ。
function tmp() { const arrayLength= array.length; console.log(arrayLength); }配列の長さが変わった際に、再度この関数が呼び出されるとどうなるのか。
このconstが「関数の呼び出しのたびに毎回値を設定します」ということであれば望む結果が得られるだろうが、もし仮に、「関数の最初の呼び出しで決まり、それ以降の呼び出しでは変更できません」だと困ったことになる。
C++を扱った感覚では、前者の動作が当然のように思われるが、気になってしまった以上調べないわけにはいかない。
【答え】
ちゃんと再設定される。
開発・実行環境
バージョン: 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
<!DOCTYPE html> <html> <head> <meta charser="utf-8" /> <title>Odonata Bug Hunt Blog</title> <link rel="manifest" href="/manifest.json"> <script type="text/javascript"> var lastValue=0; const addOne = () => { const constValue=lastValue+1; // constValue = 1; // This code become an error. var elem = document.getElementById("id_value"); elem.innerText = constValue; lastValue = constValue; }; </script> </head> <body> <input type="button" value="Increment" onclick="addOne();"><br /> value: <span id="id_value"></span><br /> </body> </html>
lastValueは数を保存しておくためのグローバル変数だ。
constValueはlastValueに1を加えた値を入れておくための変数で、関数呼び出しのたびに更新さる。
ボタンクリックで関数が呼ばれる。
実行結果
value:
(私の環境では更新されています)
0 件のコメント:
コメントを投稿
コメント表示は承認制に設定しています