字句スコープ

  1. 字句のステージ
    1. 字句の
      1. ソースコードチェックキャラクタ
    2. 字句スコープ
      1. どこの書き込みスコープ変数をブロックし、決定するコードを書くとき
    3. スコープ検索は、識別子の最初の試合で停止します
      1. だから、同じ名前の識別子が上書きされます
    4. スコープは常に最も内側の範囲から開始するランタイムで
      1. 次第に外側にスコープチェーンに沿って
    5. 調べるために沿ってスコープチェーンを見つけることができない、変数のための最も内側のスコープで始まり、ランニング、要約すると、まずOK、一致する識別子を見つけます
  2. レキシカルスコープの変更
    1. evalの
      • function foo(str, a) {    
             eval(str);    
             console.log(a, b);    
         }
        
         var b = 2;
         foo("var b = 3;", 1);    // 1, 3
    2. 無駄にstrictモードでのeval
      • function foo(str) {
            "use strict";
            eval( str );
            console.log( a );    // ReferenceError: a is not defined
        }
        foo( "var a = 2" );
      • strictモードでは、evalのは、実行時に、独自のレキシカルスコープを持っています
    3. タグ文字列の宣言文を含むevalの(..)は、挿入レキシカルスコープのランタイムを変更することがあり
      1. とともに
    4. var obj = {
          a: 2,
          b: 3
      };
      
      function fo(obj) {
          with (obj) {
              b  = 5;
          }
      }
      
      var o = {
          b: 33
      };
      
      var p = {
          a: 23
      };
      
      fo(o);
      console.log(o.b);    // 33
      
      fo(p);
      console.log(p.b);    // undefined
    5. Oオブジェクトには属性があり、属性BのPのないオブジェクトは、プロパティを作成しません。
    6. 対処するためのスコープなどのオブジェクトを参照すると声明、オブジェクト識別子スコープの属性として、新しいランタイムレキシカルスコープを作成します
      1. evalのコンパイル時のエンジンスコープ効果の最適化と、それが遅くを開始します。
  3. スコープと機能ブロックスコープ
    1. 内部非表示の実装

    2. 最小権限の原則(最小限の露出の原則)

      1. 最小限の露出に必要な内容。
    3. だから、すべての変数と関数はグローバルスコープで宣言されていません

      1. function doSomething(a) {
            b = a + doSomethingElse(a * 2);
        
            console.log(b * 3);
        }
        
        function doSomethingElse(a) {
            return a - 1;
        }
        
        var b;
        
        doSomething(2);    // 15
      2. Bの変数と関数doSomethingElseは()関数のdoSomething()プライベート・コンテンツ、外部スコープへのアクセスは、関数内に隠さプライベートコンテンツとなり、危険なことがあります。

      3. function doSomething(a) {
            var b;
        
            function doSomethingElse(a) {
                return a - 1;
            }
        
            b = a + doSomethingElse(a * 2);
        
            console.log(b * 3);
        }
    4. 隠された利点

おすすめ

転載: www.cnblogs.com/wydumn/p/11575435.html