var foo = 3;
function aa(){
var foo;
console.log(foo); // undefined ? 为什么不是3
foo = foo || 5;
console.log(foo); //5
}
问题如上图,
w3c文档--重新声明js变量,该变量的值不会消失。
var carname="Volvo";
var carname;
这样carname的值确实不会变,
但是为什么在函数里重新声明foo,foo的值会变成undefined而不是3呢?
函数在查找变量时,先从最近的作用域找,找不到再往上一层找。所以第一个语句console.log(foo)找foo变量时,在函数内找,找到的是var foo;故值为undifined,如果没有var foo;这个语句,就会继续往上一层找,这时就是3了。