JS代码执行的过程:
1.预编译 ---- 事先对js代码做一个预处理
2.代码运行---开始执行JS代码。
JS编程:
1.加载DOM的最好在/BODY之前
2.与DOM渲染无关的放在Head里面
3.JS文件尽量独立方便压缩 同时文件少,减少请求次数。
4.变量使用命名空间,减少全局变量
5.JS操作DOM获取DOM是实时的,通过Length来预先存储,方便遍历。
JS代码解析机制:
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