Water Sunlight

軽量プログラミングの文法 - JavaScript/Python

ユーザ用ツール

サイト用ツール


js:function:scope

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
js:function:scope [2021/04/12 11:04]
y2sunlight
js:function:scope [2021/04/19 14:20] (現在)
tanaka
行 3: 行 3:
  --- //[[http://www.y2sunlight.com/water|y2sunlight]] 2021-04-05//  --- //[[http://www.y2sunlight.com/water|y2sunlight]] 2021-04-05//
  
-<code javascript>+<sxh javascript;title:Example>
 var variable = 'グローバル変数'; var variable = 'グローバル変数';
 function func(arg) { function func(arg) {
行 10: 行 10:
 } }
 console.log(func('引数'));  // 出力:'引数 ローカル変数' console.log(func('引数'));  // 出力:'引数 ローカル変数'
-console.log(variable );  // 出力:'グローバル変数' +console.log(variable );     // 出力:'グローバル変数' 
-</code>+</sxh> 
 +\\
  
-=== グローバル変数 ===+===== グローバル変数 =====
  
   * 関数の外でvarにより宣言された変数   * 関数の外でvarにより宣言された変数
   * varを使用しない全ての変数はグローバル変数として扱われる   * varを使用しない全ての変数はグローバル変数として扱われる
  
-※ 変数とはvar又はletにより生成される。それらのないものはグローバルオブジェクトのプロパティとして扱われる+※ 変数とはvar又はletにより生成される。それらのないものはグローバルオブジェクトのプロパティとして扱われる。 
 +\\ \\
  
-=== ローカル変数 ===+===== ローカル変数 =====
  
   * 関数内でvarにより宣言された変数   * 関数内でvarにより宣言された変数
   * 仮引数   * 仮引数
  
-※ ローカル変数を作りたい時は常にvar \\+※ ローカル変数を作りたい時は常に ''var'' \\
 ※ ES2015以前はブロックスコープがなかった ※ ES2015以前はブロックスコープがなかった
  
-例 +<sxh javascript;title:Example>
-<code javascript>+
 var myVariable = 'Global Variable'; var myVariable = 'Global Variable';
                  
行 39: 行 40:
                  
 console.log(func());  // 出力:undefined console.log(func());  // 出力:undefined
-</code>+</sxh>
  
-varの位置に関わらずmyVariableは関数内のどこでも常にローカルスコープを持つ \\ +''var'' の位置に関わらず ''myVariable'' は関数内のどこでも常にローカルスコープを持つ。 \\ 
-※ var myVariableをコメントアウトするとグローバルスコープを持つようになる \\ +※ ''var myVariable'' をコメントアウトするとグローバルスコープを持つようになる。 \\ 
-⇒ 変数の巻き上げ(hoisting)と呼ばれる+⇒ 変数の巻き上げ(''hoisting'')と呼ばれる。 
 +\\ \\
  
-** ブロックスコープ<sup>[[js:top#ECMAScript|*2015]]</sup> **+===== ブロックスコープ ===== 
 +<sup>[[js:top#ECMAScript|*2015]]</sup>
  
 let(変数)又はconst(定数)によりブロックスコープを作る事ができる let(変数)又はconst(定数)によりブロックスコープを作る事ができる
  
-例 +<sxh javascript;title:Example>
-<code javascript>+
 let i = 1; let i = 1;
 var j = 1; var j = 1;
行 61: 行 63:
 } }
 console.log(`${i} ${j} ${c}`);  // 出力:1 2 1 ※varは上書きされている console.log(`${i} ${j} ${c}`);  // 出力:1 2 1 ※varは上書きされている
-</code>+</sxh> 
 +\\
  
-=== Functionコンストラクタと関数リテラルのスコープ ===+===== Functionコンストラクタと関数リテラルのスコープ =====
  
-<code javascript>+<sxh javascript;title:Example>
 var variable = 'Global Scope'; var variable = 'Global Scope';
  
行 80: 行 83:
  
 func(); func();
-</code>+</sxh>
  
-Functionコンストラクタによるスコープはグローバルスコープを持つ+Functionコンストラクタによるスコープはグローバルスコープを持つ。 
 +\\ \\
  
-=== Callオブジェクト ===+===== Callオブジェクト =====
  
 Call オブジェクト(Activation オブジェクトとも呼ばれる)は、関数が呼び出される度に内部的に自動生成されるオブジェクトです。関数の実行時に、引数とvar変数がCall オブジェクトに格納され、Arguments オブジェクトを参照するargumentsプロパティが生成されます。 Call オブジェクト(Activation オブジェクトとも呼ばれる)は、関数が呼び出される度に内部的に自動生成されるオブジェクトです。関数の実行時に、引数とvar変数がCall オブジェクトに格納され、Arguments オブジェクトを参照するargumentsプロパティが生成されます。
 +\\ \\
  
-=== スコープチェーン ===+===== スコープチェーン =====
  
 +スコープチェーンとは、グローバルオブジェクトとCall オブジェクトを連結したリストのことで、変数の名前解決のために使用されます。JavaScript は関数が呼び出されると、Callオブジェクトを生成しスコープチェーンの先頭に追加します。チェーンの最後にはグローバルオブジェクトが配置されています。
  
 +JavaScript の変数の名前解決には、このスコープチェーンが利用され、チェーン先頭から末尾のグローバルオブジェクトまでが検索され、チェーンに含まれない変数は、未定義になります。
  
js/function/scope.1618193082.txt.gz · 最終更新: 2021/04/12 11:04 by y2sunlight