我再来解释下吧输出1原因全局字符串都是window的属性 故"a" in window返回true故执行 var a = 1;
用N个浏览器试了下...都弹出"1",var a是全局的似乎
同样是作用域问题吧,JS会对同一个作用域的变量和函数进行预编译。。以上代码if(("a" in window)){ var a = 1; } alert(a);等价于var a;//预编译的过程,同一作用域内的变量与函数会首先被定义 if(("a" in window)){//所以这里的a自然是window的一个属性了 ,为true a = 1; }
http://www.cnblogs.com/TomXu/archive/2011/12/28/2286877.html刚看见汤姆大叔的博客,瞬间就明白了预解析:var散布的问题(Hoisting: A Problem with Scattered vars) JavaScript中,你可以在函数的任何位置声明多个var语句,并且它们就好像是在函数顶部声明一样发挥作用,这种行为称为 hoisting(悬置/置顶解析/预解析)。当你使用了一个变量,然后不久在函数中又重新声明的话,就可能产生逻辑错误。对于JavaScript,只 要你的变量是在同一个作用域中(同一函数),它都被当做是声明的,即使是它在var声明前使用的时候。
我试了一下,弹出的是1,我认为,楼上有位伙计说的就很对,只要是全局变量都是window对象下面的属性! 所以,‘a’ in window会返回true,所以a被赋值为1,弹出窗口为1
if(("a" in window)){ var a = 1; } alert(a); //1将其改编一下 (1) alert(a); //undefined if(("a" in window)){ var a = 1; } alert(a); //1(2) alert(a); //直接报错,因为没有声明a if(("a" in window)){ a = 1; } alert(a); //1证明: var a; alert(a); //直接报错,因为没有声明a if(("a" in window)){ a = 1; } alert(a); //1
var a = b = 0;
}
比如这个 b就是一个隐藏的全局变量
window 里面应该有个a吧,不知道说的对不对
故"a" in window返回true故执行 var a = 1;
var a = 1;
}
alert(a);等价于var a;//预编译的过程,同一作用域内的变量与函数会首先被定义
if(("a" in window)){//所以这里的a自然是window的一个属性了 ,为true
a = 1;
}
JavaScript中,你可以在函数的任何位置声明多个var语句,并且它们就好像是在函数顶部声明一样发挥作用,这种行为称为 hoisting(悬置/置顶解析/预解析)。当你使用了一个变量,然后不久在函数中又重新声明的话,就可能产生逻辑错误。对于JavaScript,只 要你的变量是在同一个作用域中(同一函数),它都被当做是声明的,即使是它在var声明前使用的时候。
++,其实在jQuery中我们使用的$,jQuery这些都是利用了这一点,重写/增加了window中的对象/属性
if("a" in window) {
a =1;
}
alert(a);这样看就明白了,其实就是一个声明前置的问题,所以肯定输出1
再说,我也没说这个是现实中的代码啊,没看到我写的玩玩吗?
这种代码我现实中不会用,但是通过这种代码我学到了一点js的原理,难道不可以?
ps:不懂的人,楼上已经有正确答案,自己先看看哪个像先
把a字符串赋给window..永远是true
var a;
if((window['a'])){
var a = 1;
}
alert(a);
这句话无形中已经定义了一个a的变量了,所以在window里肯定会存在哦
if(c[i]==delOn){
delete c[i];
}
}
所以,‘a’ in window会返回true,所以a被赋值为1,弹出窗口为1
var a = 1;
}
alert(a); //1将其改编一下
(1)
alert(a); //undefined
if(("a" in window)){
var a = 1;
}
alert(a); //1(2)
alert(a); //直接报错,因为没有声明a
if(("a" in window)){
a = 1;
}
alert(a); //1证明:
var a;
alert(a); //直接报错,因为没有声明a
if(("a" in window)){
a = 1;
}
alert(a); //1
<head>
<script type="text/javascript">
function open_win(){
if(("a" in window)){
alert("windows");
}
else{
alert("null");
}
}
</script>
</head><body>
<form>
<input type="button" value="swd" onclick="open_win()">
</form>
</body></html>
结果是null,而不是windows
跟声明前置有毛关系,你看这样写有用么
<script>
if((false)){
var a = 1;
}
alert(a);
</script>
var a;
if("a" in window) {
a =1;
}
alert(a);
if(("a" in window)){
a = 1;
}
alert(a);