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();
这是我的想法不知道对不对请指正
你怎么测试程序的?用的什么环境?