javascript预编译
js作为一本脚本语言,可以不经过编译直接运行,但遇到预编译的问题,尤其是变量或函数同名时,这点知识就尤其必要了。 理解预编译首先要弄清楚两种概念:函数声明和变量赋值。 function fun(){ }//函数声明 这种形式的写法是函数声明,即声明一个函数,脚本在执行之前会做预编译处理。 var fun= function(){ }//变量赋值 这种写法是变量赋值,函数在js语言里也是一种数据,匿名函数作为变量赋值给定义的变量。这种形式在预编译处理阶段,只会给变量ledi分配一个内存空间,不会做初始化。初始化过程中会在执行时执行。 <script><script/>也可看做一个函数,那么它执行前同样进行预编译,与执行函数前预编译四部曲步骤差不多,但它没有形参和实参,就少了一些步骤,但也有不同之处,就是它此时创建不是AO对象了,具体如下: 1.创建GO对象(global object)即window; 2.查找全局变量,将变量名作为window的属性,赋值为undefined(注:未声明就赋值的变量,即隐式变量,也是全局变量); 3.在<script><script/>内查找函数声明,函数名作为全局对象的属性,值为函数引用; 当变量名与函数名相同时,AO或GO内只建一个属性名; 预编译: 函数的预编译发生在执行函数之前。 预编译四部曲: 1.创建AO对象; 2.找形参和变量声明