var foo=1;function bar() { //javascript没有块级作用域, 在一个函数内任何地方声明的var都会被提到函数的最开头 //相当于这里有一个 var foo; console.log(foo); //undefined, 因为函数内的var foo把外头的给覆盖了 if (!foo) { var foo = 10; //相当于foo = 10; var foo的声明被提到最前 } console.log(foo);}bar();