词法作用域有很多文章,这里想说的是javascript的词法作用域是不严格的,或者说是有“预编译“的嫌疑的。
而ruby中,词法作用域是严格的,看看例子讨论吧。
Js
function m_a(){
if(false){
var a = 100;
}
//这里可以调用b,不会报错,虽然b的定义在后面
console.debug("a = " + a + ", b = " + b);
if (false) {
var b = 200;
}
}
Ruby
class JuneLee
def m_a
puts h #这里不能使用h
if(false)
h = 100
end
end
end
lee = JuneLee.new
lee.m_a
你觉得哪个更合理,喜欢哪个呢?
几个js的例子,看看js的预编译性(提示,下面的例子1例子2 输出不同:
(function(){//例子0
f();
function f(){
console.debug(111);
}
})();
//例子1
(function f() {
console.debug("before f(1)")
var f = function() {
console.debug("in f(1)")
return 1;
}
console.debug("after f(1)")
console.debug("before return");
var x = f();
var y = 100;
console.debug("y = " + y);
return x;
console.debug("after return");
var y = 200;
console.debug("before f(2)")
var f = function() {
console.debug("in f(2)");
return 2;
}
console.debug("after f(2)")
})();
//例子2
(function f() {
console.debug("before f(1)")
function f() {
console.debug("in f(1)")
return 1;
}
console.debug("after f(1)")
console.debug("before return");
var x = f();
var y = 100;
console.debug("y = " + y);
return x;
console.debug("after return");
var y = 200;
console.debug("before f(2)")
function f() {
console.debug("in f(2)");
return 2;
}
console.debug("after f(2)")
})();
。。。完毕。。。
。。。完毕。。。
。。。完毕。。。
-
-
-
分享到:
相关推荐
编译器的实现_词法分析部分_于埴尧.caj编译器的实现_词法分析部分_于埴尧.caj编译器的实现_词法分析部分_于埴尧.caj编译器的实现_词法分析部分_于埴尧.caj编译器的实现_词法分析部分_于埴尧.caj编译器的实现_词法...
深化理解javascript作用域其次篇之词法作用域和动态作用域_.docx
一. 实验目的: 设计、编写和调试一个具体的词法分析程序,加深对词法分析理论和自动词法分析工具的理解、实践和掌握。 二. 实验要求: ① 学习和理解正则表达式理论,写出C—语言的记号的完整的正则表达式;(适当使用...
本文是深入理解javascript作用域系列第二篇——词法作用域和动态作用域 词法作用域 第一篇介绍过,编译器的第一个工作阶段叫作分词,就是把由字符组成的字符串分解成词法单元。这个概念是理解词法作用域的基础 ...
Javascript的词法作用域分析.pdf
这里以开始定义的PASCAL语言子集的源程序作为词法分析程序的输入数据。在词法分析中,自文件头开始扫描源程序字符,一旦发现符合“单词”定义的源程序字符串时,将它翻译成固定长度的单词内部表示,并查填适当的信息...
词法分析器的一个实验报告 附带的有一个词法分析器 新手可以随便看看!
JLex词法分析生成器,可以用于生成简单词法分析器,java编写
词法分析器和语法分析的一小部分 希望对大家会有帮助
一个简单的java词法分析器,有图形界面 欢迎大家下载
一个类C语言的词法分析器,可以将输入的代码转换成TOKEN
Sample语言编译器java实现__词法分析器(正则表达式方式)的源代码。写入token文件和符号表的文件路径记得打开源代码改哦!Sample语言规则详见编译原理实践教程(第2版)清华大学出版社。此代码纯本人一行一行编写,...
简单函数绘图语言的词法分析器,支持的关键字有(大小写不敏感):ORIGIN,SCALE,ROT,IS,TO,STEP, DRAW,FOR,FROM 运算符:+ ,-,*,/,**(幂);分隔符: 、 ( 、 ) 、 ,
词法分析实验 编译原理课程设计的词法分析实验全!
用java语言实现的简单词法分析器 实现了界面操作
词法分析器, 词法分析器, 词法分析器, 词法分析器, 词法分析器,
Pascal语言的词法分析器源程序和开发文档,用LEX编写,可作为编译原理课程的学习参考,源文件已编译通过
(1)将选取的语言子集编写一个简单程序,放在一个文本文件...(2)不管选取的是C语言还是PASCAL语言的子集,编程时采用C语言或者C++语言实现该词法分析程序; (3)要将一个个单词区分清楚并归类(例如for属于关键字)。