日期:2014-05-16 浏览次数:20463 次
如下
var a = 3;
?
实际有两个步骤:
1 初始化a为undefined
2 a赋值3
?
因此会出现一些“匪夷所思”的现象,即JS中变量可以先使用后声明。这在Java中是不允许的。
System.out.println(a); int a = 1;?
编译通不过。但JS可以,如下
alert(a); var a;?
?
虽然是undefined,但不会报错。说明a的确声明了,且为undefined。
?
如果只是“alert(a)”,没有“var a”的话JS引擎会报错的。
alert(a);
?
FF中如下
?
?
虽然可以先使用再声明,但这样会造成赋值的效果丢失。如下
alert(a); var a = 1;?
这次输出的仍然是undefined而非1。
?
又如,
alert('a' in window); // true var a;
?
?
虽然代码形式上写在alert后,引擎仍然先自动处理var的声明。最后输出的是true。
?
明白了这些就不难理解下面的代码运行结果了
if (!("a" in window)) { var a = 1; } alert(a);