[原]小心使用JavaScript的局部和全局变量
Posted by bianbian on 2006-08-26 10:44
本文Tags: JavaScript, 全局变量
一直以为自己对JavaScript已经很精通了,这次却犯了一个低级错误。这个错误带来的后果就是:如果你最近用浏览器上小百合的话,发现点击左边导航菜单的链接都会打开新窗口。。。其次的后果是害我调试了一下午加晚上。。。
先是这样的,为了DOM设置属性的方便,我自己写了个方法,省得每次都setAttribute:
- Net = {};
- Net.Dom = {};
- Net.Dom.setProperties = function(obj)
- {
- for(var i=1; i<arguments .length; i++)
- {
- if(typeof arguments[i]=="object")
- {
- for(name in arguments[i])
- obj[name] = arguments[i][name];
- }
- }
- }
- //这样原来:
- div.setAttribute("width", "100px");
- div.setAttribute("height", "100%");
- ......
- //就可以写成:
- Net.Dom.setProperties(div, {width:"100px", height: "100%"});
上面的setProperties代码里面有个错误,会导致改变window的name属性。因为window是可以省略的(直接打document其实是window.document),而“for(name in arguments[i])”的表示方法浏览器会解析成“for(window.name in arguments[i])”。也就是框架的name变了,这样左边设的target自然就失效了,导致链接都以新窗口打开。改成“for(var name in arguments[i])”就好了。
因为JavaScript相对比较自由,写变量一定要注意,而且这种错误比较隐蔽,难以发现。局部变量一定要以var申明,否则是全局变量;要用全局变量时候也要注意一下命名方法,以”g_”开头或者全大写都是可行的办法。
最后我们一起复习一下JavaScript的局部变量和全局变量:
Read the rest of this entry »
遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道
相关日志
Posted in JavaScript, Technology | 1 Comment »