関数を、下記のように書き換えているようなイメージです。ブロックスコープがないので、関数内の先頭に変数宣言を持っていった方が、直感的なスコープと実際のスコープが一緒になるので分かりやすいです。関数を入れ子にして定義すると、それぞれの関数ごとに独自のローカルスコープを持ちます。内側と外側のローカル変数が同じ名前の場合は、内側のローカル変数が優先されます。仮引数のスコープ仮引数もローカル変数です。関数内のみで有効で、グローバル変数に影響は与えません。参照した場合は、グローバル変数を参照します。スコープの外から、スコープの中の変数を参照することはできません。同じ名前でも別の変数として扱われるというのはつまり、仮引数の名前を変えた下記のコードと同じことです。(グローバル変数を参照)引数で値を渡すということは、渡した先の関数のローカル変数に、渡した値をコピーしているようなイメージです。よって、コピー先(ローカル変数)をいくら変更しても、コピー元(グローバル変数)に影響は与えません。仮引数で参照型を渡したときのスコープ参照型とは、値そのものではなく、その値があるメモリ上の番地(アドレス)が格納される変数のことです。参照型なので、これらの変数には実際のオブジェクトが格納されているわけではなく、別の場所にあるオブジェクトのアドレス情報が格納されているだけです。引数で参照型を渡すということは、オブジェクトそのものをコピーしているわけではなく、アドレス情報をコピーしているだけなので、元々のオブジェクトはひとつのままです。(グローバル変数を参照)仮引数で渡されたアドレスにあるオブジェクトの値を関数内で変更すると、グローバル変数からも同じオブジェクトを参照するので、どちらも値が変わっています。仮引数はローカル変数ですが、参照渡しの場合はスコープの話からは外れます。まとめグローバル変数はプログラム全体から参照でき、ローカル変数はその関数の中でのみ参照できる。ホイスティングによる混乱を避けるため、関数内の先頭に変数宣言をまとめて書く。仮引数もローカル変数のスコープだが、参照渡しの場合は関数外から参照するオブジェクトにも影響を与えるので気をつける。長くなったので、スコープチェーンとクロージャについては分割して書きます。»プロフィールid:tacamyスーパージャバスハカーになりたい。)月別アーカイブはてなブログをはじめよう!tacamyさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。