javaScript語言的預編譯與運行

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

相關文章
相關標籤/搜索