JS中在html中加载的顺序

Javascript 装载和执行
以下的两段内容来自于上面的链接:

浏览器对于Javascript的运行有两大特性:1)载入后马上执行,2)执行时会阻塞页面后续的内容(包括页面的渲染、其它资源的下载)。于是,如果有多个js文件被引入,那么对于浏览器来说,这些js文件被被串行地载入,并依次执行。
因为javascript可能会来操作HTML文档的DOM树,所以,浏览器一般都不会像并行下载css文件并行下载js文件,因为这是js文件的特殊性造成的。所以,如果你的javascript想操作后面的DOM元素,基本上来说,浏览器都会报错说对象找不到。因为Javascript执行时,后面的HTML被阻塞住了,DOM树时还没有后面的DOM结点。所以程序也就报错了。

一般说来,html中的加载顺序是自上而下的,JavaScript代码的位置可以放在head部分,也可以放在body部分,也可以使用外部脚本。


下面我们来看几个例子:


1. 以函数加载为例

以声明的形式定义函数

alert(fun());    //10
function fun(){
    var value = 10;
    return value;
}
alert(fun());   //10

以匿名函数的方法建立一个函数

alert(obj.member);     //undefined
var obj = function(){
    var value = 10;
    return value;
};
alert(obj());  //10

2. 以加载为例

alert(num);  
num = 10;   //加到了window中
console.log(window); 

//alert(num);这个语句此时输出出现错误(把num = 10当做一个表达式编译的时候不执行)  ReferenceError: num is not defined
alert(num1);   //undefined  编译期申请了空间 
var num1 = 888;
alert(num1);  //888
alert(member); //ReferenceError: member is not defined
alert(window.member);   //undefined
console.log(window);    
alert(obj.member);  //undefined

总而言之,JS的加载是分为两个阶段的,编译阶段和执行阶段,编译阶段会对所有的var和function进行扫描,并将var变量声明赋初值为undefined,而function则被初始化为函数值。执行阶段,JS的执行顺序是自上而下的,遇到var变量便进行赋值(因此,在赋值之前进行调用的话会出现错误).遇到函数变量的话会从活动对象中寻找函数。


最后说一下undefined:

出现的情况有以下几种:
1.这个变量存在 ,但是并没有给予任何值(声明未赋值)。
2.一种普通的数据类型和一种值(赋值操作),任何变量都可以赋值为 undefined,此时其没有特别含义。
3.一个存在的对象中的一个不存在(没有声明)的值,会被认为是 undefined
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值