js -- 変数のスコープ

巴扎黑
巴扎黑オリジナル
2017-07-20 14:12:52958ブラウズ

初心者として、毎日何かを学ぶのは良いことです。今日、クロージャについて学んでいたときに、スコープとスコープチェーンという 2 つの概念を見ましたが、野心を持った初心者として、これらを詳しく理解する必要があると感じました。

変数のスコープ

jsの変数には、グローバル変数とローカル変数があります。これは文字通り理解できると思います...例を示します

var message = "今天我做的糯米蒸排骨"; //定义一个全局变量function doL(){

  var ss = "侠客行很好看";      //定义一个局部变量

  alert(message);             //输出"今天我做的糯米蒸排骨",在函数中可以引用到全局变量

  function alertDo(){

    alert(ss);

  }

  alertDo();             //输出"侠客行很好看",这就涉及变量的作用域了

};doL();
alertDo();              //没法输出  alertDo is not definedalert(message);         //可以输出"今天我做的糯米蒸排骨"

ここには2つの興味深い点があります

1. 変数がvarで宣言されていない場合、実際にはグローバル変数を宣言します。は間違っています。以下を見てください。num はグローバル変数、

および mum = 1;

は実際には属性の割り当て操作です。まず、現在のスコープ チェーンで mum を解決しようとします (メソッドで宣言されている場合、現在のスコープ チェーンはグローバル スコープとメソッドのローカル スコープなどを表します)。見つかった場合は mum 属性の割り当てが実行され、mum が見つからなかった場合は、グローバル オブジェクト (つまり、ウィンドウなどの現在のスコープ チェーンの最上位オブジェクト) に mum 属性が作成されます。オブジェクト)と割り当て。 注意!グローバル変数は宣言しませんが、グローバル オブジェクトのプロパティを作成します。変数宣言には独自の削除不可能な属性があるため、var num = 1 と num = 1 を比較します。前者は削除不可能な属性を持つ変数宣言であるため、後者はグローバル変数の属性です。ので、グローバル変数から削除できます。

var num =1;
mum = 1;
2. 変数宣言は関数の先頭に進みます。実際、以前にも遭遇しました

    var scope="global";  function t(){  
        console.log(scope);  var scope="local"  
        console.log(scope);  
    }  
    t();

最初に未定義を出力し、次にスコープを宣言します。事前にローカル変数を上書きします。これは次の状況と同等です

    var scope="global";  function t(){  var scope;
        console.log(scope);  
        scope="local"  
        console.log(scope);  
    }  
    t();

以上がjs -- 変数のスコープの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。