js 有关window的问题

风中夜 2013-03-20 05:04:37

function test(){
var t = "a";
if(t in window){

var a = 1;
}
alert(a);
}
//弹出undefined
function test(){

if(t in window){
var t = "a";
var a = 1;
}
alert(a);
}
//弹出1



请问大神,这是为什么?一个在if块外面一个在if块里面,对if条件语句有什么影响,求解
...全文
164 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
豪情 2013-03-21
  • 打赏
  • 举报
回复
其实我只是想说,一楼的回答基本切中要害。
functionsub 2013-03-21
  • 打赏
  • 举报
回复
引用 4 楼 gg892723341 的回复:
2楼请问下,你说那个window里面到底有什么?或者 xx in window 为真,这个xx都是什么的情况下为真?
window就是浏览器对象啊,里面有document,location什么的。 这些写window.document跟document效果是一样的。 你举得例子里,下面的时候t是undefined,这个也是在window里,所以t in window就等同于undefined in window 所以是true。 #2说的块级作用域就是比如说在if代码块之内的作用域,这个在JS里面是没有的。 所有变量的作用域都是向上查找离他最近的那个function,在这整个function里面都是可以访问他的,就算你在这个function的最末尾写上var t,但没给他赋值,你在function的第一行也是可以直接访问t,只是这个时候t的值是undefined。 具体的window里面到底有什么,这个说起来就比较多了,BOM对象你自己去百度一下吧。
风中夜 2013-03-21
  • 打赏
  • 举报
回复
2楼请问下,你说那个window里面到底有什么?或者 xx in window 为真,这个xx都是什么的情况下为真?
风中夜 2013-03-21
  • 打赏
  • 举报
回复
3楼可以解释清楚点吗?
风中夜 2013-03-21
  • 打赏
  • 举报
回复
哦,话说,那是1楼,哈哈,不好意思
风中夜 2013-03-21
  • 打赏
  • 举报
回复
好吧,谢谢大家,尤其谢谢2楼,虽然还是不尽明白,但是有里头了,哈
ec_huyinghuan 2013-03-21
  • 打赏
  • 举报
回复
直接 for(x in window){ console.log(x+":"+window[x]) }; 看看window里面包含不含自定义的变量就清楚了
await2013 2013-03-21
  • 打赏
  • 举报
回复
引用 1 楼 functionsub 的回复:
恩, 预编译的问题。 放外面的时候var t = 'a';t就不是undefined了。 放里面的时候执行到if的时候t还是undefined,而undefined算是一个特殊的数据类型,window下是可以直接访问的,所以undefined in window就是ture了。 两段代码预编译后是这个样子的: JavaScript code?12……
oxfed 2013-03-21
  • 打赏
  • 举报
回复
引用 4 楼 gg892723341 的回复:
2楼请问下,你说那个window里面到底有什么?或者 xx in window 为真,这个xx都是什么的情况下为真?
<script type="text/javascript"> var o={name:"lizc"}; alert("name" in o);//结果为true;in语法用于判段in前面的字符串是否为in后面的对//象的属性。 </script>
似梦飞花 2013-03-20
  • 打赏
  • 举报
回复
js没有块级作用域变量
functionsub 2013-03-20
  • 打赏
  • 举报
回复
恩, 预编译的问题。 放外面的时候var t = 'a';t就不是undefined了。 放里面的时候执行到if的时候t还是undefined,而undefined算是一个特殊的数据类型,window下是可以直接访问的,所以undefined in window就是ture了。 两段代码预编译后是这个样子的:

function test(){
    var t = "a"//此时t='a'
    var a ;
    if(t in window){
        a = 1;
    }
    alert(a);
}
//弹出undefined
function test(){
    var t;
    var a;
    if(t in window){
        t = "a";
        a = 1;
    }
    alert(a);
}
//弹出1
简单的说你试一下

undefined in window
就知道了

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧