作为一个半路出家的菜鸟,对一些基础知识的了解不是很到位,感觉似懂非懂,雾里看花
等到用的时候就要调试一会才能找到正确的使用方法,但是有时候是没有调试的机会的,比如说去公司面试的时候做笔试题。
前段时间去一家公司面试,结果可想而知了。。。
废话说到这里,下面就记录一些最近去了解的一些基础。
一、javascript的执行过程
看这么道题吧:
不卖官子,结果是:3,0,1,1
这里就是JS的一个执行过程的问题,当页面加载的时候会逐块读入script里的代码,然后进行一个预编译的工作,确定没有语法错误才会进行后续的执行工作。
在预编译的时候会将var声明的变量以及function提到代码的最前端(当然我们是看不到的),经过预编译完了的代码就可以理解成这样:
另外就是var声明变量的时候不受if等一些判断语句的影响,即使执行的时候不会执行的代码里的var也会在预编译的时候提前。
例子:
这的结果是undefined,然后会报错,1是不会弹出来的,然后会再弹出2。。充分说明了var不受条件语句的影响,这个例子也可以看得出来JS是按块来执行。
总而言之,JS在执行的时候这样滴:
1.读入一块JS代码段(可以理解为一段在script标签里的代码)
2.预编译(检查有没语法错误),说的通俗点就是将一些function与var等关键字声明放到最前面
3.如果没有语法错误,再执行代码,否则直接读入下一块代码段后跳至第2步骤
4.上一段代码执行过程中出现错误后不再向下执行,直接读入下一块代码段然后跳至第2步骤,直到所有代码执行完毕。
补充:
关于var这个的意思一直以来我也没搞清楚,查了查资料,应该只是告诉浏览器有这么个东西存在,分配一个内存空间给他,但是并没有任何内容,预编译的时候应该就是做这些事吧。在赋值操作以后才会有东西存在其中,由于一般我们都是var str = '',这样连着写,于是就忽略了这其中其实还是另有天地的。
第一部分就这样吧,想起来再回来补充,后面的部分会相继记录下来。