javascript面向对象(1)
主要内容:
在讲面向对象之前,我们先看一个示例:

类似这种情况大家都能够理解,但是,如果把代码改动一下,请再看一下:

为什么会这样?
如果把代码再改一下看看,如把变量改成b,则直接报错

JavaScript是一种描述型脚本语言,由浏览器进行动态的解析与执行,浏览器对于不同的方式有不同的解析顺序,js的解析过程分为两个阶段,一是预处理阶段,二是执行阶段。
页面加载过程中,浏览器会对页面上或载入的每个js代码块(或文件)进行扫描,如果遇到定义式函数,则进行预处理(类似于C等的编译),处理完成之后再开始由上至下执行;遇到赋值式函数,则只是将函数赋给一个变量,不进行预处理(类似1中变量必须先定义后引用的原则),待调用到的时候才进行处理。

函数声明方式不同,预处理的顺序也有些不一样,如:

从上面可以看出,两个函数都是先运行,后声明,但一个正常运行,一个直接报错。表示浏览器未对demo1进行预处理,依序执行,所以报错demo1未定义
同样的道理。比较一下变量声明的优先顺序:

这就是预处理过程演示。
当出现同名的function声明的函数和var声明的变量时,在先调用后声明的情况下,这时函数会自将变量替换掉,不管变量先声明还是后声明都一样。


但如果先声明后使用则顺序相反,变量会替代函数:


全局预处理阶段调用对比:

函数预处理示例:


如果变量声明时没有用到var关键字,则变量为全局变量

浙公网安备 33010602011771号