function creAd(){
var abs=document.getElementsByTagName("abbr");
if(abs.length<1) return false;
var abbes=new Array();
for(var i=0;i<abs.length;i++){
var tit=abs[i].getAttribute("title");
var des=abs[i].lastChild.nodeValue;
abbes[des]=tit;
}
var cdl=document.createElement("dl");

for(des in abbes){
var tit1=abbes[des];
var cdt=document.createElement("dt");
var cdt_text=document.createTextNode(des);
cdt.appendChild(cdt_text);
var cdd=document.createElement("dd");
var cdd_text=document.createTextNode(tit1);
cdd.appendChild(cdd_text);
cdl.appendChild(cdt);
cdl.appendChild(cdd);
}
document.getElementsByTagName("body")[0].appendChild(cdl);

}
window.onload=creAd;
这段代码
在第一个for循环里var des声明的变量,然后怎么在第二个for循环des就可以正常用了?跟java语言差这么大

解决方案 »

  1.   

    javascript没有块级作用域 函数内声明的方法可以在函数内任何位置访问
    声明变量不写var也可以 是全局变量
      

  2.   


    每次都直接 var 就可以  不觉的会对你有干扰
      

  3.   


    想跨函数的话 不用var 申明 直接赋值
      

  4.   


    for(var i = 0 , len = 10; i < len; i++){
        do something....
    };
      

  5.   


    每次都直接 var 就可以  不觉的会对你有干扰
    你的意思是每次都var 然后2个循环内同名的变量当成是2个不同的变量吗?
      

  6.   

    变量不使用var定义的是全局变量,这样就可以被第二个循环访问了,如果不想这样,使用var定义
      

  7.   


    每次都直接 var 就可以  不觉的会对你有干扰
    你的意思是每次都var 然后2个循环内同名的变量当成是2个不同的变量吗?for(var i=0.....for(var i=0.....直接声明 直接初始化 直接用 我不觉得 这样会发生问题
    在合适的地方 声明 和初始化 不要初始化和使用 没有var 显式声明的变量 
    如果一个变量 是全局的  那么 我会在全局声明定义  
    比如  window.kk={} window.kk.name='';
    使用就  alert(window.kk.name)
    不要觉得这样麻烦 这样会减少很多问题
      

  8.   

    第二个循环里des变量和第一个for循环的变量不是同一个。
    简单的说,你在声明一个变量时如果没有加上var ,那么这个变量将会被默认的作为window对象的一个属性。
    例如:
    y=10;
    'y' in window===true;