js 詞法作用域(靜態) 與 作用域鏈 指向 活動對象(動態--執行) 不矛盾嗎?


不矛盾,Lexical scoping 決定變數名的解析法則,Prototype chain 決定屬性名的解析法則。


不矛盾,作用域鏈是在函數執行時創建的,是該函數執行上下文的一部分,但它是通過掃描函數的定義來創建的,所以是基於詞法的。

以上是我的理解

可以先看這篇:What is the Execution Context Stack in JavaScript? by David Shariff

然後再看這篇:Identifier Resolution and Closures in the JavaScript Scope Chain by David Shariff


我覺得是不矛盾的,以我小白的視角來看

函數作用域鏈 = (動)活動對象(AO) + (靜)scope屬性

函數的作用域鏈,是函數執行的時候動態創建的,但是它又是基於靜態詞法的環境(scope屬性)

所謂「動態創建」,是指在函數執行的時候,先創建之前沒有的作用域鏈,再創建活動對象,然後活動對象推入作用域鏈最前端;

所謂「基於靜態的詞法環境」是指函數定義的時候,這個函數本是沒有作用域鏈的,有的只有scope屬性,而這個屬性指向了這個函數外部的執行環境,而這個外部的執行環境擁有作用域鏈(因為這是外部創建外部的執行環境才擁有作用域鏈的,這樣有一點遞歸的味道)。

ES5官方文檔:

額不知道這樣理解對不對。。

參考:http://dmitrysoshnikov.com/ecmascript/javascript-the-core/

http://davidshariff.com/blog/what-is-the-execution-context-in-javascript/

ES5/可執行代碼與執行環境


那麼問題來了什麼是原型鏈?


推薦閱讀:

jquery ajax怎麼通過header傳遞參數? 不想通過url傳參!
115登錄頁的long polling在chrome裡面為什麼看不到返回結果?
怎樣合理地使用 Ajax ?過度使用 Ajax 會有哪些弊端?
Web 前端工程師需要 AJAX?感覺請求提交都是後端的事情。
XML在數據傳輸哪些方面會比JSON有優勢,在哪些領域更加適合?

TAG:JavaScript | Ajax | 計算機網路 | 前端開發工具 |