「なでしこv3」開発掲示板

なでしこ3を改善するための掲示板
[一覧へ] > (@89) [低] [未処理]
@89■ (#322) 変数のスコープってどうなっているんでしょうか...? - おさね (2024-08-27 15:48) /低 未処理
例えば以下のプログラムのように、変数を同じ関数内(同じスコープ内)で宣言した無名関数からも呼び出せるようにしてほしいです。

ーーーーーーー

「実行!」のボタン作成
それをクリックした時には、
  「OK」のボタン作成して《OKボタン》に代入
  「キャンセル」のボタン作成して《キャンセルボタン》に代入

  《OKボタン》をクリックした時には、
    「実行します!」と表示
    DOM親要素から《OKボタン》をDOM子要素削除
    DOM親要素から《キャンセルボタン》をDOM子要素削除
  ここまで
  《キャンセルボタン》をクリックした時には、
    「キャンセルしました!」と表示
    DOM親要素から《OKボタン》をDOM子要素削除
    DOM親要素から《キャンセルボタン》をDOM子要素削除
  ここまで
ここまで

(#323) 遅くなりました - クジラ飛行机 (2024-09-06 23:16) /低 未処理
> plugin_browser.mjs:199 Uncaught Error: 『DOM子要素削除』でクエリ『undefined』でDOM取得に失敗しました。

と表示されるように、確かに、OKボタンがundefinedですね。グローバルで定義しないと消せないです。

・「には」構文ですが、関数の中で定義した関数の扱いになります。
・ただし、関数の外側にあるローカル変数にはアクセスできない仕様です。

引き続き、以下のGitHubで作業します。
https://github.com/kujirahand/nadesiko3/issues/1746



(#330) 返信ありがとうございます - おさね (2024-10-05 22:57) /低 未処理
以下のJavaScriptが正常に動作するように、なでしこの関数内関数からも、外側の変数にアクセスできればより便利になるのにな、と思った次第です。
恐らく大きく修正が必要なのではないかと思いますので、またゆっくりご検討ください。

ーーーーー

click_button.addEventListener("click", ()=>{
  const ok_button=document.body.appendChild(document.createElement("button"));
  ok_button.textContent="OK";
  const cancel_button=document.body.appendChild(document.createElement("button"));
  cancel_button.textContent="cancel";

  ok_button.addEventListener("click", ()=>{
    document.body.removeChild(ok_button);  //外側の関数内で宣言した変数も使える
    document.body.removeChild(cancel_button);
  });
  cancel_button.addEventListener("click", ()=>{
    document.body.removeChild(ok_button);
    document.body.removeChild(cancel_button);
  });
});

(#322)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能