JS代码预解析原理
浏览数:30 /
时间:2015年06月09日
/* JS代码预解析、变量作用域、作用域链等 应该能作为学习JS语言的入门必备知识。下边给出些简要解释和一些典型的代码段,若要了解更多,能从网上搜索到更多相关示例。 引用网上的一段有关 “JS的执行顺序” 的解释:如果一个文档流中包含多个script代码段(用script标签分隔的js代码或引入的js文件),它们的运行顺序是:步骤1. 读入第一个代码段(js执行引擎并非一行一行地执行程序,而是一段一段地分析执行的)步骤2. 做语法分析,有错则报语法错误(比如括号不匹配等),并跳转到步骤5 步骤3. 对var变量和function定义做“预解析”(永远不会报错的,因为只解析正确的声明)步骤4. 执行代码段,有错则报错(比如变量未定义)步骤5. 如果还有下一个代码段,则读入下一个代码段,重复步骤2 步骤6. 结束 */ // 下边给出 三段觉得比较典型的代码示例: /********** 一:基本的几条语句 **********/ alert(num); // undefined var num = 0; alert(str); // 错误:str未定义 str = "string"; alert(func); // undefined var func = function (){ alert(‘exec func‘); } test(); // exec test alert(test()); // 先exec test 后undefined function test(){ alert(‘exec test‘); } /********** 二:函数名与变量名相同 **********/ //var mark = 1; function mark(x) { return x * 2; } var mark; alert(mark); // function mark(x) { return x * 2; } // 去掉前边的var mark = 1;则会返回1 /********** 三:把第二段包括在语句块中 **********/ // 当有条件时候(代码包含在条件语句块里) if (false) { var mark1 = 1; function mark1() { alert("exec mark1"); } //var mark1; alert(mark1); } alert(mark1); mark1(); // 由于解析浏览器解析不同,这段代码在不同浏览器里执行的结果不一致,具体原因可从网上查找答案
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。