读书人

关于js解析实施有趣的事

发布时间: 2012-07-04 19:33:55 作者: rapoo

关于js解析执行有趣的事

前些天总监在群里发了两段代码:

?

var foo = 1;  function bar() {      if (!foo) {          var foo = 10;      }      alert(foo);  }  bar();  

?

?

?

var a = 1;  function b() {      a = 10;      return;      function a() {}  }  b();  alert(a);  

?

?

不测试,大家看输出的是什么?

1 楼 rimoer 2012-06-18 试了,谁知道,来解释下... 2 楼 liukemin 2012-06-18 rimoer 写道试了,谁知道,来解释下...
http://liukemin.iteye.com/blog/1562948 看这篇文章 3 楼 hwhoho2010 10 小时前 这个很有意思啊,呵呵 除了预编译,还有闭包的概念在里面

对于第一个例子,在预编译bar期间,由于foo还是undefined的,所以执行了var foo = 10;这句话,而var foo就变成了函数bar的局部变量,之前定义的foo是全局变量。所以你在执行bar()时,打印的是局部变量foo(即 foo=10)而不是全局变量foo = 1
对于第二个例子,意思差不多,不过这次不但改变了a为局部变量,而且连a的类型也改了

读书人网 >JavaScript

热点推荐