编程语言_词法作用域_比较和区别_in_Ruby_Javascript
词法作用域有很多文章,这里想说的是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 endendlee = JuneLee.newlee.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)")})();??
?
。。。完毕。。。
。。。完毕。。。
。。。完毕。。。
-
-
-
?
?