![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
静的スコープは、関数内関数で宣言した変数を関数内関数の外で参照できないが、その外にある変数を関数内関数で参照することをいい、スコープチェーンが、その関数内関数から外側のブロックに向かって、変数を探していく仕組みのことを指すと認識しております。
プロトタイプチェーンのように、目的の値が見つかれば、外側に同名の値が存在した場合でもそれ以上遡ることはしません。
また、関数内関数から外にある変数を参照する仕組みをクロージャーと呼びます。
ところでこの静的スコープとスコープチェーンの違いって何なのでしょうか。どちらも外側にある変数を参照しようとすることを指す言葉で、
違いが読み取れませんでした。
No.2ベストアンサー
- 回答日時:
スコープ
変数名からオブジェクトを参照する一覧表。
これが無いとオブジェクトが見えなくなる。
スコープチェーン
スコープが発生する構文は入れ子状態で定義できるので、
スコープをスタックの様に積み重ねとして表したもの。
変数を探していく仕組み
その時点でのスコープチェーンにて、
スタックの一番上から順に辿って変数名を見つけること。
スタックの一番下にある「グローバルスコープ」でも見つからなかったらエラー。
静的スコープ
プログラムを書いた時点で、スコープチェーンが決まっていること。
動的スコープ
呼び出し方によって、スコープチェーンが変わること。
JavaScript には存在しない。
クロージャー
一般にスコープはブロック範囲内の実行が終わったら無用となるので消されるが、
そのまま消さないで残したままにする仕組み。
関数オブジェクトに、その時点でのスコープチューンを「束縛」するイメージ。
No.3
- 回答日時:
スコープを概念的に捕らえると面倒なので、実装よりで説明してみました。
オブジェクトを参照する一覧表
JavaScript のエンジンが実行時に使う「シンボルテーブル」のこと
Web ブラウザの開発ツールでは、実行中断時にデバッグ情報 "Scope" として表示できる
シンボルテーブルに無い変数名は名前解決できない。つまり「スコープ外」とされオブジェクトが見えなくなる
関数スコープ
関数の実行を開始した時に生成される「シンボルテーブル」であり、関数の実行が終われば破棄される
関数の外側を実行中は、このテーブルは存在しない or 破棄された後なので、関数内変数は「スコープ外」となる。
グローバルスコープ
最初から用意されており必ず存在する「シンボルテーブル」なので、どこからでも「スコープ内」になる
参考)
https://ja.wikipedia.org/wiki/シンボルテーブル
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの複数のセルを一括で絶対参照にする方法 3 2023/06/14 15:57
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- その他(プログラミング・Web制作) Pythonのオブジェクトの関数について 2 2023/05/11 19:15
- 数学 1変数関数に陰関数ってあるんですか? 1変数関数は f(x)=xの式 f(x)はxの値で決まるもの( 4 2023/05/08 18:47
- その他(Microsoft Office) 【スプレドシート】IMPORTRANGE関数とSUMIFSの組み合わせ 1 2023/03/05 18:17
- Excel(エクセル) 数式→数値固定する方法ありますか? 5 2023/06/18 15:22
- Excel(エクセル) エクセル テーブル機能の不明点 2 2022/04/14 14:10
- Excel(エクセル) Excel2019、2021の日付、曜日の表示について 2 2022/11/29 15:01
- 物理学 座標変換に関して質問です。参考書に 「力は一般に時間と場所によって異なるから力f(ベクトル)はx,y 3 2022/07/03 20:24
- JavaScript addEventListener()でリスナー関数に名前を付ける構文を教えてください 1 2023/07/01 17:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
初心者です。gulpでコンパイル...
-
VBA ステータスバー DoEvents
-
PowerPointで時計表示
-
eval()の危険性の具体例を教え...
-
C#でボタン名を変更しても動く
-
アクセスのフォームでタイマー...
-
Mozillaでステイタスバーへの表示
-
CreateFile、CloseHandleの繰り...
-
一定時間ごとの実行
-
Schemeでのリスト操作
-
Excel VBA にて JavaScript の...
-
resizeToメソッドが動作しません
-
JSPの処理の途中で、JavaScript...
-
Javascript 全角カナ+半角スペ...
-
クリックすると下に説明文が出...
-
エクセル 半角英数6文字以上 ...
-
JAVAスクリプトだけで、ブラウ...
-
ajax 通信 iisの設定?
-
htmlのfileタグに自動で値を入...
-
JavaScriptに関する質問です。 ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JSPの処理の途中で、JavaScript...
-
if(1){...}とはどういうことで...
-
デザイン時のVisible=Falseは実...
-
1つのVBAコードをすべてのコア...
-
jQuery ui Datepicker 明日以降...
-
PowerPointで時計表示
-
VBA SORT Applyでエラー
-
VBA ステータスバー DoEvents
-
〔Excel:VBA〕マクロの実行が異...
-
リクエスト結果が一瞬しか表示...
-
C#でボタン名を変更しても動く
-
ラベルの色がかわってくれない
-
CreateFile、CloseHandleの繰り...
-
既存のwebサイトで、ローカルの...
-
JavaScriptでショートカットキ...
-
初心者です。gulpでコンパイル...
-
javascriptで最初のところに戻...
-
VBAの[cellsメソッドは失敗しま...
-
VB.netの重複データ数カウント...
-
Excel VBA にて JavaScript の...
おすすめ情報
ご回答有難うございます。
スコープは、変数や関数に付ける名前の有効範囲(グローバル内{window}で宣言すればグローバル変数或いはオブジェクト、ローカルで宣言すれば環境(Call)オブジェクトのプロパティ)だと思っておったのですが、オブジェクトを参照する一覧表、それがないと見えなくなる、とはどういう意味でしょうか。