2012-12-28 23 views
-1

我正在通過this article,這真的很不錯。我只想要一些目前正在思考的問題。執行環境 - 創建和激活階段

function foo(i) { 
    var a = 'hello'; 
    var b = function privateB() { 

    }; 
    function c() { 

    } 
} 

foo(22); 

在調用foo(22),所述創作階段看起來如下:

fooExecutionContext = { 
    variableObject: { 
     arguments: { 
      0: 22, 
      length: 1 
     }, 
     i: 22, 
     c: pointer to function c() 
     a: undefined, 
     b: undefined 
    }, 
    scopeChain: { ... }, 
    this: { ... } 
} 
  1. 爲什麼是長度的一個。
  2. scopeChain鍵包含什麼。
  3. 這也是指什麼。 [是否涉及全局上下文or功能上下文]
  4. 任何人都可以指向我可以嘗試的同一主題和示例上的另一個資源。

我很新的東西JS側。我只是想糾正自己,讓你們更清楚......所以我沒有錯。

+1

我在#1後停止閱讀。真!? – Alexander

+0

@亞歷山大:我對JS方面很陌生。我只是想糾正自己,讓你們更清楚......所以我沒有錯。 – Kevin

回答

1

當一個函數被調用時,一個ExecutionContext被創建。這在函數的環境中定義了很大的一部分。

1.爲什麼是長度之一。

現在讓我們來看看你的函數,arguements屬性被創建。此對象包含一個長度(即,這是傳遞給該函數的參數數量)

現在讓我們看看下面的示例。

function myFun1(a,b){ 
    function myFunc2(){ 
     alert("hello"); 
    } 
} 

myFun1(10,20); 

在myFun1

ExecutionContext: { 
     variableObject: { 
     arguments: { 
      0: '10', 1: '20', 
      length: 2 
     } 
    } 
} 

2.什麼的ExecutionContext這是否指得。 [是指全局上下文還是功能上下文]

this屬性已創建,它取決於函數的調用方式。

  1. 常規功能** myFunction(args) =>將引用全局 對象......即窗口對象。
  2. 對象方法object.myFunction(args) =>它會引用 對象。
  3. 回調call() or apply().這樣的值是call()/apply().
  4. 第一 參數作爲構造(new myFunction(1,2,3))。這是一個以myFunction.prototype爲原型的空對象 。