首页 > Web开发 > 详细

JS代码预解析原理

时间:2015-02-28 11:34:17      阅读:269      评论:0      收藏:0      [点我收藏+]
/* 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(); // 由于解析浏览器解析不同,这段代码在不同浏览器里执行的结果不一致,具体原因可从网上查找答案

JS代码预解析原理

原文:http://9956007.blog.51cto.com/9946007/1615864

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!