質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

3回答

1710閲覧

スコープチェーンの実装について

mikaeri_begin

総合スコア8

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/07/12 13:26

編集2016/07/12 15:04

多くの初心者同様、javascriptのスコープチェーンというものがよくわかりません。
ある本では「関数が生成されたスコープを表すオブジェクトの『集合体』」と記述されています。

一方、ネットで調べると、変数オブジェクトを外側のブロックに向かって探していく「仕組み」、と記述されていたりします。

で、定義について探すと、以下のサイトが見つかりました。
http://dmitrysoshnikov.com/ecmascript/chapter-4-scope-chain/

scope chain is exactly this list of all (parent) variable objects for the inner contexts.

これがスコープチェーンの定義っぽいので、やはりlist(≒集合体?)を指す言葉のようですが、
結局、この「集合体」とはなんなのでしょうか。

以下のサイトでは
http://maeharin.hatenablog.com/entry/20130313/javascript_scopechain

ES3によるとScope Chainとは識別子の検索に使われるオブジェクトの「リスト」のこと
なお「リスト」という概念をどう実装するかはES3では定義されていない

と記述されています(ES3ですが...)。
つまり、スコープチェーンとは何らかの実装を伴ったもののはずで、
具体的にはどのような実装がされているものなのでしょうか。

また、人がスコープチェーンと言うとき、変数オブジェクトを探す「仕組み」、と言う意味も含んでいるものなのでしょうか。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

実装の話は think49 さんの紹介された先を読んでいただくとして、スコープチェーンを仕組みと表現してもそれほど大きな間違いとも言えない気がしますけどねえ。
耳は細胞の集合体であるとともに音を聞くための仕組みを実装したものでもありますから。

投稿2016/07/12 15:41

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ES3 のスコープチェーン(Scope Chain)とは「識別子評価時に走査するオブジェクトのリスト」を指します。
with 文、try-catch 文は例外として、下記オブジェクトがスコープチェーン上にリストアップされます。

  • 関数コード … 内部プロパティ [[Scope]] が持つ Activation オブジェクト
  • グローバルコード … グローバルオブジェクトのプロパティ

下記URLを参考にしてみてください。

Re: mikaeri_begin さん

投稿2016/07/12 15:25

編集2016/07/12 15:32
think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mikaeri_begin

2016/07/12 15:40

「オブジェクトのリスト」の「リスト」という部分がすごいもやもやします... JavaScriptにはlistは無いですよね 実装者が思い思いでリストを実装していて、まぁ配列のようなものと漠然と思っておけば良いのでしょうか
think49

2016/07/12 16:20 編集

[[Scope]] もスコープチェーンも ES3 の内部処理上のプロパティ/リストなのでプログラマが触れる範疇にはありません。 詳しくは親記事に載せたリンク先にあるのでそちらを参考にしてください。 それぞれ、「ES3 の日本語訳」「ES3 の日本語訳をした方が書いている記事」であり、内容の正確性は保証できます。
guest

0

こちらが分かりやすかったです。
http://tacamy.hatenablog.com/entry/2012/12/31/005951

たとえば、「組織」といった場合、それを構成する個々のものは
目に見えますが、組織自体は目に見えませんよね。
同様に、目には見えないけどそれがあると仮定すると
分かりやすいもの、と考えてはいかがでしょうか。

投稿2016/07/12 13:54

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mikaeri_begin

2016/07/12 15:00 編集

理解するために難しい部分には触れないでおくべき、ということでしょうか... 提示していただいたサイトでは > 「親の Call オブジェクトの場所」の情報をたどっていくことによって、スコープチェーンが成り立ちます。 と記述されていますが、これだとまるでスコープチェーンという実体が存在しないもののように書かれてしまっています。 これに対し、例えば以下のサイトでは > ES3によるとScope Chainとは識別子の検索に使われるオブジェクトの「リスト」のこと > なお「リスト」という概念をどう実装するかはES3では定義されていない。 http://maeharin.hatenablog.com/entry/20130313/javascript_scopechain と記述されています(ES3ですが...)。 つまり、スコープチェーンとは何らかの実装を伴ったもののはずですよね。 スコープチェーンが成り立つのは、「オブジェクトのリスト」が何らかの形で実装されているからであって、 具体的にはどのような実装がされているのか、気になるのです。 少し方向性が変わってしまって申し訳ありません。 このコメントに合わせて質問内容を修正いたします。
takasima20

2016/07/12 15:09

申し訳ありませんが、私の手に余るご質問のようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問