謝謝你的幫助。簡單示例中執行上下文的外觀如何
在一類我以我曾經碰到過下面的代碼:
var carlike = function(obj, loc){
obj.loc = loc;
obj.move = move;
return obj;
};
var move = function(){
this.loc++;
};
var ben = carlike({}, 9);
這是我的理解是,當功能carlike
是在其執行環境變量的創建階段的最後一行調用move
設置爲undefined
。所以我的問題是:在哪一點是move
設置等於function() {this.loc++;};
?我發現這是令人困惑的,因爲移動函數是在carlike函數之後定義的。那麼carlike
如何在它後面訪問環境。
我真的想知道這是如何工作的引擎蓋下的執行上下文的條件,範圍等
有些事情我已閱讀,試圖明白這一點:
http://dmitrysoshnikov.com/ecmascript/chapter-1-execution-contexts/ http://corporate.tuenti.com/en/dev/blog/functions-and-execution-contexts-in-javascript-2
編譯器通過和執行是不同的事情,可能採取不同的路徑。 JS中的編譯器通過頂部的代碼並驗證變量和其他一些東西......變量「邏輯上」移動到其範圍的頂部並設置爲可用,這就是爲什麼移動可用作變量它的範圍,但obj.move是爲對象obj聲明的不同變量,並分配了「全局」移動的值。 –