请教我在<SCRIPT>下面定义了几个数组,然后,在其中一个函数触发后,改变了值
但,其他函数跟着触发后,得不到值啊?
比如下面的这个例子,main()函数改变了 NUM的值,然后接着 Encode()函数触发执行,得到的NUM的值还是3,这是为什么?
怎样才能各个函数共享值呢?<!--
var arr_alp;//字母表
var arr_bund;//每个字母表中的字母对应的下界
var base;//单位边界
var low,high;//在Encode函数中使用
var str="The process:<br>";
var NUM=3;
function main(value)
{
    var NUM=Number(value);//获取字母表的个数
    arr_alp=new Array(NUM);//字母表的个数
    arr_bund=new Array(NUM);//每个字母表对应的下界
    base=(1/NUM);//单元边界
    var i;
    for(i=0;i<NUM;i++)
    {
        //arr_alp[i]='A';
        arr_alp[i]=String.fromCharCode('A'+i);
        arr_bund[i]=i*base;
    }
    //alert(base);
    str+=base;
    str+="<br>"; 
    for(i=0;i<NUM;i++)
    {
      //  str+=arr_alp[i];
        if(i==NUM-1)
        {
            str+=arr_bund[i];
            str+="-------------";
            str+=1;
            str+="<br>";
        }
        else
        {
        str+=arr_bund[i];
        str+="-------------";
        str+=arr_bund[i+1];
        str+="<br>";
        }  
    }
    Output.innerHTML=str;   
}
function Encode(string)
{
   var j;
   var i=string.length;//i表示文本框已经输入字母的个数
   var s=string.charAt(i);//捕捉文本框中输出的最后一个字符
   alert(NUM);
   for(j=0;j<NUM&&s!='!';j++)                               
   {
   alert(string);    
   if(s==arr_alp[j]&&i==1)//第一个字母处                                                                                                 
       {         
   low=arr_bund[j];                                    
   high=arr_bund[j]+base; 
       }                                                          
       if(s==arr_alp[j]&&i!=1)//第二个开始                                
   {
   var d=high-low;
   low=low+arr_bund[j]*(high-low);
   high=low+d*base;
   }
       str+=low;
       str+="------------"
       str+=high;
       str+="<br>"                                                       
   }
   if(s=='!')//结束
   {
            encode=(low+high)/2;
            str+="最终编码结果:"
            str+=encode;
            str+="<br>"   
       }
   Output.innerHTML=str;
 
}
//-->
</script>

解决方案 »

  1.   

    既然你要将NUM作为全局变量使用,就不要再函数内重新定义NUM了
    var NUM=Number(value);//获取字母表的个数 
    改为
    NUM=Number(value);
      

  2.   

        NUM=Number(value);//获取字母表的个数
        arr_alp=new Array(NUM);//字母表的个数
        arr_bund=new Array(NUM);//每个字母表对应的下界
        base=(1/NUM);//单元边界
        var i;
        for(i=0;i<NUM;i++)
        {
            arr_alp[i]=String.fromCharCode('A'+i);//没有被赋值,why?
            arr_bund[i]=i*base;
        }
        alert(arr_alp[i-2]+arr_alp[i-1]);
    这里面的arr_alp没有被赋值啊?为什么?
      

  3.   

    arr_alp[i]=String.fromCharCode('A'+i);//没有被赋值,why?
    改为
    arr_alp[i]=String.fromCharCode('A'.charCodeAt(0)+i);
      

  4.   

    看看这篇文章你就明白了
    http://blog.csdn.net/xiaofan_sap/archive/2009/10/15/4675108.aspx