读书人

编程语言_词法作用域_比较跟区别_in_R

发布时间: 2012-09-20 09:36:50 作者: rapoo

编程语言_词法作用域_比较和区别_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)")})();
?

?

?

。。。完毕。。。

。。。完毕。。。

。。。完毕。。。

-

-

-

?

?

读书人网 >编程

热点推荐