JS代碼執行的過程:html
1.預編譯 ---- 事先對js代碼作一個預處理java
2.代碼運行---開始執行JS代碼。編程
JS編程:windows
1.加載DOM的最好在/BODY以前瀏覽器
2.與DOM渲染無關的放在Head裏面app
3.JS文件儘可能獨立方便壓縮 同時文件少,減小請求次數。函數式編程
4.變量使用命名空間,減小全局變量函數
5.JS操做DOM獲取DOM是實時的,經過Length來預先存儲,方便遍歷。this
JS代碼解析機制:spa
1.編譯階段---預處階段-----轉成字節碼
2.運行階段---代碼執行-----執行本地代碼
變量:var與function都是變量的聲明。
jS是按照快來執行的即便--Script就是對這一個標籤類的JS作--(編譯,執行)這樣的一個過程。
活動對象----看狀況來講,當前命名空間下面。
a.編譯階段:
對聲明的變量進行所在上下文(活動對象--好比windows)的提高--屬於當前環境
var------------值爲undefined -----------------做爲當前活動對象的一個屬性
function-------值爲函數定義代碼 -------------做爲當前活動對象的一個屬性
感受就是對變量初始化設初始值
引用:JavaScript解釋器在執行腳本時,是按塊來執行的。通俗地說,就是瀏覽器在解析HTML文檔流時,若是遇到一個<script>標籤,則JavaScript解釋器會等到這個代 碼塊都加載完後,先對代碼塊進行預編譯,而後再執行。執行完畢後,瀏覽器會繼續解析下面的HTML文檔流,同時JavaScript解釋器也準備好處理下一個代碼塊。
因此:編譯階段快都在一個活動對象之上,變量函數是共享的,出問題主要是應爲代碼若是在html解析階段,後續爲完成,代碼執行可能出問題 因此儘可能在onload裏面
編寫。
注意:函數表達式:var say = function(params) {} 相似的形式。
b.運行階段:
運行階段,代碼是順序執行的。
總結:
html = html + JS(script)
頁面加載後進行解析html文檔流 ,創建DOM樹 渲染頁面
頁面解析是採起的從上到下的順序,若是遇到JS代碼快(script)則編譯運行在作後續的解析,代碼儘可能在onload事件裏面執行,這樣的話不會出現變量沒有定義的錯誤
====================================================================================================
javaScript實現繼承的兩種方式:(本質採用原型鏈,call,apply實現)
類式繼承:單繼承
混入繼承(mix):-實現多繼承
====================================================================================================
JS面向對象的開發:
1.基於{}命名空間
2.基於JS的動態加載JS機制和基於JS的CSS加載機制
3.基於Iframe的頁面機制
4.基於Html頁面標籤的數據負載機制或者cooke機制進行數據暫存。
5.基於function的類的設計(函數式編程)
====================================================================================================
1.做用域:
2.prototype
3.constractor
4.apply,call機制
5.面向對象與代碼結構
6.開源js項目
====================================================================================================
// 構造函數 function Foo(y) { // 構造函數將會以特定模式建立對象:被建立的對象都會有"y"屬性 this.y = y; } // "Foo.prototype"存放了新建對象的原型引用 // 因此咱們能夠將之用於定義繼承和共享屬性或方法 // 因此,和上例同樣,咱們有了以下代碼: // 繼承屬性"x" Foo.prototype.x = 10; // 繼承方法"calculate" Foo.prototype.calculate = function (z) { return this.x + this.y + z; }; // 使用foo模式建立 "b" and "c" var b = new Foo(20); var c = new Foo(30); // 調用繼承的方法 b.calculate(30); // 60 c.calculate(40); // 80 // 讓咱們看看是否使用了預期的屬性 console.log( b.__proto__ === Foo.prototype, // true c.__proto__ === Foo.prototype, // true // "Foo.prototype"自動建立了一個特殊的屬性"constructor" // 指向a的構造函數自己 // 實例"b"和"c"能夠經過受權找到它並用以檢測本身的構造函數 b.constructor === Foo, // true c.constructor === Foo, // true Foo.prototype.constructor === Foo // true b.calculate === b.__proto__.calculate, // true b.__proto__.calculate === Foo.prototype.calculate // true );
====================================================================================================
引用:http://blog.csdn.net/cxiaokai/article/details/7552653
http://www.blogjava.net/JAVA-HE/archive/2010/10/09/334021.html
http://www.nowamagic.net/librarys/veda/detail/1642
http://www.cnblogs.com/sanshi/archive/2009/07/14/1523523.html