关于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的类型也改了