这个问题,今天是一个朋友问出来的,估计是小鸟。但是没关系,我以前也是小鸟哈。有一段这样的代码。
他的问题是,为什么第一次出来的是 undefined 第二次是 abc.
问题很简单,就是一个作用域的问题。因为 JavaScript 是没有块级作用域的。也就是说。所有的代码都是一行行的执行。上述代码也许在 Java 就不一样了。解释型的语言就是这样子。第一个 scope 定义再全局中。第二个 scope 虽然有定义为 『123』 但是在 alert 语句的时候 var scope 语句并未执行。再整个函数体中隐藏了同名的全局变量。虽然有定义,但是在执行 var 之前。它是不会被初始化的。
所以为什么 taobo ude,ali ued 经常说的一句话 “所有的变量声明集中起来,全部放在顶部是一个好习惯。」 这里就能清除的体现了。