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

相关文章
相关标签/搜索