解释型语言究竟是怎么执行的?

WildGhost 2013-11-07 10:52:16
“所谓解释型语言,就是代码在执行时才被解释器一行行动态翻译和执行,而不是在执行之前就完成翻译。简单说,解释型语言就是边翻译边执行,而编译型语言是先编译后执行,两者的操作过程不同。”

“所谓解释程序是高级语言翻译程序的一种,它将源语言(如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?
...全文
1018 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
WildGhost 2013-11-08
  • 打赏
  • 举报
回复
感谢各位,但实际上大多数书上讲到这个问题时是不讲“预编译”的。这牵涉到一个概念叫做“提升(hoisting)”。“提升”指的是所有在函数作用域里的变量定义和函数定义都会被提升至作用域代码的最开始处。
KK3K2005 2013-11-07
  • 打赏
  • 举报
回复
执行的时候是行解释 但是执行前还是要加载的
scscms太阳光 2013-11-07
  • 打赏
  • 举报
回复
"读一行,运行一行"这理解本身就是错误的,至少语法检查是有的,遇到错,前面的也不会执行:
alert("下面有错,我执行了吗?");
if(for())
zhjdg 2013-11-07
  • 打赏
  • 举报
回复
这个怎么解释。 <script> //var scope = 'global'; var f = function() { console.log(scope); // 输出undefined //var scope = 'f'; } f();
Go 旅城通票 2013-11-07
  • 打赏
  • 举报
回复
JavaScript解析过程可以分为编译和执行两个阶段,也会预编译的,如变量定义,函数定义 var f = function() { console.log(scope); // 输出undefined ,预编译,生成变量scope,值为undefined,由于解释性,赋值语句晚于上面那句,就输出undefined了 var scope = 'f'; } 楼主研究这个帖子下,包你头更加痛 http://bbs.csdn.net/topics/390300541
未知数 2013-11-07
  • 打赏
  • 举报
回复
js变量声明是放在代码执行之前的 只需记住:同一片作用域,相同的变量名指代的必定是同一个变量 不止这个,还有很多类似看似神奇的,对js机制理解深了自然明白,不理解解释也是枉然
zhjdg 2013-11-07
  • 打赏
  • 举报
回复
这么神奇。 等楼下解释。
  • 打赏
  • 举报
回复
undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性
萧萧可乐 2013-11-07
  • 打赏
  • 举报
回复
4楼正解 解释语言 也存在一个预编译的过程的。。 语法上的错误 它会在预编译过程中就被返回

87,918

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧