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

javascript基础有关----javascript的执行过程

2012-06-29 16:24 113 查看
作为一个半路出家的菜鸟,对一些基础知识的了解不是很到位,感觉似懂非懂,雾里看花

等到用的时候就要调试一会才能找到正确的使用方法,但是有时候是没有调试的机会的,比如说去公司面试的时候做笔试题。

前段时间去一家公司面试,结果可想而知了。。。

废话说到这里,下面就记录一些最近去了解的一些基础。

一、javascript的执行过程

看这么道题吧:

<script type="text/javascript">
function x(){alert(2)};
x();
var x = function(){alert(0)};
x();
var x = function(){alert(1)};
x();
function x(){alert(3)};
x();
</script>


不卖官子,结果是:3,0,1,1

这里就是JS的一个执行过程的问题,当页面加载的时候会逐块读入script里的代码,然后进行一个预编译的工作,确定没有语法错误才会进行后续的执行工作。

在预编译的时候会将var声明的变量以及function提到代码的最前端(当然我们是看不到的),经过预编译完了的代码就可以理解成这样:

<script type="text/javascript">
function x(){alert(2)};
function x(){alert(3)};
var x;
x();
x = function(){alert(0)};
x();
x = function(){alert(1)};
x();
x();
</script>


另外就是var声明变量的时候不受if等一些判断语句的影响,即使执行的时候不会执行的代码里的var也会在预编译的时候提前。

例子:

<script>
if(false){
var a = 1;
}
alert(a)
alert(b)
alert(1)
</script>
<script>
alert(2)
</script>


这的结果是undefined,然后会报错,1是不会弹出来的,然后会再弹出2。。充分说明了var不受条件语句的影响,这个例子也可以看得出来JS是按块来执行。

总而言之,JS在执行的时候这样滴:

1.读入一块JS代码段(可以理解为一段在script标签里的代码)

2.预编译(检查有没语法错误),说的通俗点就是将一些function与var等关键字声明放到最前面

3.如果没有语法错误,再执行代码,否则直接读入下一块代码段后跳至第2步骤

4.上一段代码执行过程中出现错误后不再向下执行,直接读入下一块代码段然后跳至第2步骤,直到所有代码执行完毕。

补充:

  关于var这个的意思一直以来我也没搞清楚,查了查资料,应该只是告诉浏览器有这么个东西存在,分配一个内存空间给他,但是并没有任何内容,预编译的时候应该就是做这些事吧。在赋值操作以后才会有东西存在其中,由于一般我们都是var str = '',这样连着写,于是就忽略了这其中其实还是另有天地的。

第一部分就这样吧,想起来再回来补充,后面的部分会相继记录下来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: