08_コンテキストを実行

2536 ワード

「文脈」とは何かをよく知るために.いくつかの例を見に来ました.
明さんは紅さんに「安心してください.彼はあなたの条件を承諾しました.」
読者の目には、明が言っている彼が誰を指しているのか分かりませんが、言葉を加えると、
強ちゃんの家から出たら、明さんは紅さんに「安心してください.彼はあなたの条件を承諾しました.」
この時は彼が誰を指しているか分かります.私たちはJavaScriptを例にしています.

//         ,       `this`   ,    “   ”
function someFunction() {
    console.log(this.xxx)
}

//            `this`    `window`   (    )
//    `window.xxx`     ,      `undefined`
someFunction()    // undefined

//   ,            “   ”,         ;  :
var test = { xxx: 'hello' }

someFunction.call(test)    // "hello"
以下はシリコンバレーのJavaScript進級ノートです.
1.コード分類(位置)
  • グローバルコード
  • 関数(ローカル)コード
  • 2.グローバル実行コンテキスト
  • は、グローバルコードを実行する前に、Windowsをグローバル実行コンテキスト
  • として決定する.
  • は、グローバルデータを前処理する.
  • var定義のグローバル変数=>undefinedは、windowの属性
  • に追加されます.
  • function宣言のグローバル関数=>赋値(fun)をwindowに追加する方法
  • this=>レート
  • は、グローバルコード
  • の実行を開始する.
    3.関数実行コンテキスト
  • は、関数を呼び出し、関数を実行する前に、対応する関数を作成してコンテキストオブジェクト(仮想的には、スタック内に存在する)を実行する
  • .
  • は、ローカルデータを前処理する.
  • モダリティ変数=>赋値(実参)=>を実行コンテキストの属性として追加します.
  • アーグメンnts=>賦値(実際参照リスト)は、実行コンテキストの属性
  • として追加されます.
  • var定義の局所変数=>undefinedは、実行コンテキストの属性
  • として追加されます.
  • function宣言の関数=>割り当て(fun)は、コンテキストを実行する方法
  • として追加される.
  • this=>割当値(関数を呼び出すオブジェクト)
  • は、関数コード
  • の実行を開始します.
  • は、グローバルコードが実行される前に、JSエンジンは、すべての実行コンテキストオブジェクト
  • を管理するスタックを作成する.
  • は、グローバル実行コンテキスト(window)の決定後、スタック
  • に追加する.
  • は、関数実行コンテキスト作成後、スタック
  • に追加する.
  • は、現在の関数が実行された後、スタックトップのオブジェクトを除去する
  • .
  • すべてのコードが実行された後、スタックにはwindowだけが残っています.図はJavaScript高級教程の中に
  • があります.
    以下のコードは順次何を出力しますか?プロセス全体でいくつかの実行コンテキストが発生しましたか?
     console.log('gb: '+ i)
      var i = 1
      foo(1)
      function foo(i) {
        if (i == 4) {
          return
        }
        console.log('fb:' + i)
        foo(i + 1) //    :          
        console.log('fe:' + i)
      }
      console.log('ge: ' + i)
    
    
    
  • 順番にgb:undefined fb:1 fb:2 fb:3 fe:3 fe:2 fe:1 ge:1
  • を出力します.
  • は全部で5つのコンテキストオブジェクト
  • を生成しました.
    いくつかのテストテーマ
    /*
          1:         ,        
       */
      function a() {}
      var a
      console.log(typeof a) // 'function'
    
    
      /*
          2:
       */
      if (!(b in window)) {
        var b = 1
      }
      console.log(b) // undefined
    
      /*
          3:
       */
      var c = 1
      function c(c) {
        console.log(c)
        var c = 3
      }
      c(2) //     
    
    テスト問題3の実行手順については、
    var c  //        
    function c(c){    //          
        console.log(c)
        var c=3  
    }
    c=1 //    c   , c   1
    c(2)  //   c           。