JavaScript静的作用域とダイナミックスコープの実例について詳しく説明します.

1473 ワード

静的な作用領域とは、コードの一部を指し、それが実行される前にその作用領域が決定されています.簡単に言うと、実行前にどのような場所の作用領域(変数)が適用できるかが決定されました.
ダイナミックスコープ、C関数のスコープは関数呼び出し時に決定されます.
JavaScriptは語法の作用域である静的作用域を採用しています.

//      :
var a = 10;
function fn() {
  var b = 1;
  console.log(a + b);
}
fn(); // 11
fn関数を作成する時に、どの変数が作用するかを確定しました.関数fnに変数aがあれば、変数aを直接操作します.
ない場合は上のレベルに検索します.これは静的な作用領域です.

//      :
function foo() {
  console.log(a);
}
function bar() {
  var a = 3;
  foo();
}
var a = 2;
bar(); // 2;
bar呼び出しは、barの中でfooが呼び出され、foo関数は変数aを検索する必要があります.JavaScriptは語法の作用領域(すなわち静的作用領域)であるため、fooが解析されるとグローバルスコープに作用します.
したがって、グローバルスコープでのみaを探します.出力結果はbarスコープのaではなく、2です.jsが採用している場合のダイナミックレンジは、fooがbarから呼び出します.まずbarでaを調べ、3に出力します.
ps:以下はJavaScriptの静的作用領域を見ます.
スコープとは、コードに定義された変数の範囲です.スコープは変数の検索方法を定めています.つまり、現在のコードの変数へのアクセス権限を決定します.
静的スコープとダイナミックスコープ
静的作用域とは、関数の作用領域を指し、関数が定義された時に決定されたが、動的作用領域とは、関数の作用領域が実行されている時に決定される.次はコードです.
var value=1function foo(){    consolie.logs;function bar(){    var value=2    foo();bar();
このコードが静的作用領域を使って変数にアクセスすると、foo()関数を実行する時、まず関数内に局所変数valueの定義があるかどうかを確認します.ない場合、前のコード、つまりvar value=1を検索します.valueの定義を検索したので、1を出力します.このコードがダイナミックスコープを使って変数にアクセスすると、foo()関数を実行するときは、まず依然として関数の内部からローカル変数valueの定義があるかどうかを検索します.ない場合は、Bar()関数を呼び出すスコープから探します.var value=2が見つかりました.従って出力2JavaScriptは静的スコープ方式で変数にアクセスするので、この例は1に出力されます.
ダイナミックスコープを採用している言語はbashです.