javascript 变量提升,我是新手,我是新手

 var foo = 1;
function bar(){
  alert(foo);
    }
bar();
输出结果是undefined

Q1:为什么定义了foo,却还是undefined


var foo = 1;
function bar(){
 alert(foo);
 if(foo) var foo = 10;
 alert(foo);
}
bar();

输出结果是10 10

Q2: 为什么定义了foo, 第一次的输出结果还是10?

 var foo = 1;
function bar(){
if(!foo) var foo = 10;
alert(foo);
}
bar();

输出结果是10;
Q3:为什么定义了foo, 且foo不为0, 输出结果还是10???

你第一段代码不是undefined啊,是1
第二段第一个alert是函数bar内容的foo变量,由于定义提升所以是undefined,等价于下面的
var foo = 1;

 function bar(){
var foo=undefined;//////////
 alert(foo);//undefined
 if(foo)  foo = 10;//var定义在其作用域内容提升最前赋值为undefined,执行到赋值语句才会赋值
 alert(foo);//10
}
bar();

第三段代码同第二段 foo提升为undefined,!foo为true所以执行if赋值

参考:javascript运行机制浅析
JavaScript代码,变量,函数执行顺序问题
javascript判断中为假false的值

你要注意一下:是你在调用bar()的时候才获取数据,foo作用域只在bar()里面,外边的foo他不管。你需要把foo移到bar()里面。

讲这么多干嘛function bar(foo ){}这就ok了

第一,估计是浏览器问题,火狐输出的是1,所以并不懂你问题在哪
第二,输出的是两个undefined,原因是if里面的var,默认先var了一个新的foo,但是并没有赋值?所以是两个undefined
第三,同理
同新手,仅供参考

```var foo;
function bar(){
alert(foo);
}
foo=1;
bar();

var foo;
function bar(){
alert(foo);
if(foo){
var foo;
foo=10;
}
}
foo=10;
bar();

var foo;
function bar(){
if(!foo){
var foo;
foo = 10
}
alert(foo);
}
foo=1;
bar();

这是我的想法不知道对不对请指正

你怎么测试程序的?用的什么环境?