您的位置:首页 > Web前端 > JavaScript

JavaScript运行机制

2013-06-20 16:36 302 查看
一、运行顺序

1、 读入第一个JavaScript代码段
注:JavaScript执行引擎并非一行一行地执行程序,而是一段一段地分析执行的(以<\script\>标签来分割)

2、 做语法分析,如果遇到错误,则报语法错误,停止该段代码运行,并跳转到步骤5

3、 对var变量做声明(初始为undefined),对function定义做“预解析”
注: 不会报出任何错误和停止运行,因为只解析正确的声明

4、 执行JavaScript代码段,如果遇到错误,则报出运行错误,停止该段代码执行,并跳转到步骤5

5、 如果还有下一个代码段,则读入下一个代码段,重复步骤2

6、执行完成

二、JavaScript运行图



三、结合例子分析

alert(testNum);

alert('ok');

testNum = 2;

//testNum未声明,执行报错。

alert(testNum); alert('ok'); testNum = 2; //testNum未声明,执行报错。

alert(testNum);

alert('ok');

var testNum = 2;

//弹出undefined和ok。预编译的时候,声明了变量t;执行到alert(t)这行代码的时候,t尚未被赋值,所以弹出undefined。

alert(testNum); alert('ok'); var testNum = 2; //弹出undefined和ok。预编译的时候,声明了变量t;执行到alert(t)这行代码的时候,t尚未被赋值,所以弹出undefined。

testFunc();

function testFunc() {}

alert('ok');

//弹出ok。预编译的时候,解析了定义式函数语句function testFunc() {},顺利执行。

testFunc(); function testFunc() {} alert('ok'); //弹出ok。预编译的时候,解析了定义式函数语句function testFunc() {},顺利执行。

testFunc();

var testFunc = function() {};

alert('ok');

//testFunc不是函数,执行报错。预编译的时候,声明了变量testFunc = undefined;执行到testFunc()时,testFunc还等于undefined,不是函数,所以执行testFunc()会报错。

testFunc(); var testFunc = function() {}; alert('ok'); //testFunc不是函数,执行报错。预编译的时候,声明了变量testFunc = undefined;执行到testFunc()时,testFunc还等于undefined,不是函数,所以执行testFunc()会报错。

<\script type="text/javascript">

testFunc();

alert('first block');

<!--\script-->

<\script type="text/javascript">

alert('second block');

<!--\script-->

//弹出second block。因为JS是一段一段执行的,第一段执行到testFunc()的时候报错,整个第一段都不会再执行,第二段正常执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: