日期:2014-05-16  浏览次数:20359 次

解释型语言究竟是怎么执行的?
“所谓解释型语言,就是代码在执行时才被解释器一行行动态翻译和执行,而不是在执行之前就完成翻译。简单说,解释型语言就是边翻译边执行,而编译型语言是先编译后执行,两者的操作过程不同。”

“所谓解释程序是高级语言翻译程序的一种,它将源语言(如BASIC)书写的源程序作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。就像外语翻译中的“口译”一样,说一句翻一句,不产生全文的翻译文本。这种工作方式非常适合于人通过终端设备与计算机会话,如在终端上打一条”

“Interpreted computing languages are languages whose source code is processed by a software program called an interpreter that reads in the text and immediately acts upon the instructions defined by the text.”

那看下下面这段程序——

var scope = 'global'; 

var f = function() { 
  console.log(scope); // 输出undefined 
  var scope = 'f'; 

f();


上面这段程序会输出undefined,原因是执行console.log(scope);时程序会发现函数内的那个变量scope“已经定义但没初始化”。那我的问题就是,如果解释型语言是解释一句执行一句的话,当执行console.log(scope);时它怎么知道函数里有个变量scope?

------解决方案--------------------

js变量声明是放在代码执行之前的
只需记住:同一片作用域,相同的变量名指代的必定是同一个变量

不止这个,还有很多类似看似神奇的,对js机制理解深了自然明白,不理解解释也是枉然

------解决方案--------------------
JavaScript解析过程可以分为编译和执行两个阶段,也会预编译的,如变量定义,函数定义

var f = function() { 
  console.log(scope); // 输出undefined ,预编译,生成变量scope,值为undefined,由于解释性,赋值语句晚于上面那句,就输出undefined了
  var scope = 'f'; 



楼主研究这个帖子下,包你头更加痛
http://bbs.csdn.net/topics/390300541



------解决方案--------------------
"读一行,运行一行"这理解本身就是错误的,至少语法检查是有的,遇到错,前面的也不会执行:
alert("下面有错,我执行了吗?");
if(for())

------解决方案--------------------
执行的时候是行解释
但是执行前还是要加载的
------解决方案--------------------
4楼正解
解释语言 也存在一个预编译的过程的。。
语法上的错误 它会在预编译过程中就被返回