###用語集
解説サイトA= https://logmi.jp/tech/articles/322067
画像A= https://img.logmi.jp/article_images/CnNjsbCDuXcau2y612zVvW.jpg
抱えている問題・実現したいこと
html・css・javascriptでゲームを作っているが、
「このwebページは多くのメモリを使用しています」と警告が出る。
無視していると強制的にブラウザがページを再読み込みさせてしまうらしい。
ゲームプレイ途中にページが再読み込みされて処理がリセットされては困るので
メモリリークについて理解し、対策を取りたい。
前提
いろいろ解説サイトを読んだが、中でもゲームについて言及している解説サイトAをメインで読んでいます。
課題:スコープの共有が理解できない
解説サイトAによるとクロージャーがメモリに関係ありそうなので、理解をして、自分のゲームでクロージャーを使ってないか判断したいが、スコープの共有が理解できないです。
画像Aに対して、「something関数とクロージャであるNOT_USE_CLOSURE関数にはスコープの繋がりができます」と解説サイトAに記載されています。それを検証するために下記のソースを実行しました。
something関数はinner_func2に、NOT_USE_CLOSURE関数はinner_func1に置き換えました。
javascript
1var outer_func = function () { 2 var outer_obj = "THIS IS outer_obj"; 3 var inner_func = function () { 4 var local_obj = outer_obj; 5 var inner_func1 = function () { 6 console.log(local_obj); 7 var hoge = "hogeeeee"; 8 } 9 var inner_func2 = function () { 10 console.log(hoge); 11 } 12 inner_func2(); 13 } 14 inner_func(); 15} 16outer_func();
すると「inner_func1」と「inner_func2」はスコープが共有されるはずなのに下記エラーが出ます。
test.html:22 Uncaught ReferenceError: hoge is not defined
変数「hoge」が関数「inner_func2」内で有効にならなかった理由がわかりません。「inner_func1」を実行していないから変数「hoge」が宣言されなかったとみて、「inner_func2」実行する前の行で「inner_func1();」としてみましたが結果は変わりませんでした。
###試したこと
スコープについても認識を誤っていないか、調べてみる。結果、スコープは「変数の有効範囲」であると再認識した。
備考
以前
https://teratail.com/questions/280194
に質問しましたが、1つの実現したいこと・抱えている問題に対して課題が複数あったので、課題ごとに分けて質問する為、その理由を添えて削除依頼しました。削除依頼は運営にも受理され、現在は削除されています。運営に受理されたということで複数に分けて質問させていただきます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/27 11:11
2020/07/27 11:19
2020/07/27 11:26
2020/07/27 11:30
2020/07/27 11:31
2020/07/27 11:33