var a = 10;function test(){a = 100;console.log(a);//为什么不是undefined?var a;}test();
把a=100删掉就是undefined,后面的var a,实际上什么都没做,变量声明提升和函数声明提升规则一样,作用域内声明有,就不会向上一级作用域寻找,你这里在函数内部已经声明,那么a的值就是100,重复声明处理为赋值,假设没有赋值,那跳过不执行。