js变量作用域--虚惊一场

作者:kun10 发布时间:February 7, 2010 分类:JavaScript

昨晚写毕业设计的原型写的比较晚,一晚就容易出现奇怪的东西。
我定义并执行了这么一个函数

(function(){
        var aa = document.getElementById('aa');
        aa.style.width = "20px";
}());

不知哪里来的想法,以前从没有测试过变量作用域的我,打算测试一下aa变量在函数后是否存在。
不测不知道一测吓一跳,
没想到在chrome,ie678下面居然alert(aa)都可以返回一个htmldom元素

(function(){
        var aa = document.getElementById('aa');
        aa.style.width = "20px";
}());
alert(aa);//returns an HTMLDOMObject

但是ff下面浏览器却报aa is undefined
这是怎么回事呢?我越发的困惑了。。。
于是拿出以前的代码再看

(function(){
        var bb = document.getElementById('aa');
        bb.style.width = "20px";
}());
alert(bb);//所有浏览器都报错,bb未定义

哦,这下明白了,原来在除了ff以外的浏览器都支持用id直接访问window对象下面的id为那个值的对象
说的有点绕么?
也就是第一段代码中后面alert的aa不是原来的那个aa,匿名函数内的aa仍然在外界看不到,但是外界直接使用aa也会指向id为aa的dom元素。但是火狐下面这一条行不通
记一下这一点希望大家在测试程序的时候别犯浑,同时也提醒我们在命名变量的时候要注意其名称的选择

标签: 浏览器差异, 匿名函数, 变量作用域

仅有一条评论 »

  1. 古斯彼德 古斯彼德 April 20th, 2010 at 09:06 pm

    很微妙的问题,收藏了!细节啊~~~

添加新评论 »

captcha
请输入验证码