2015-05-23 75 views
0

問題是,我的函數不返回正確的值。我認爲原因是,因爲回調在返回值後加載。JavaScript函數的全局變量

代碼:

function hexToBase58(inputNumber) { 
    var output = ""; 
    $.getScript("JavaScript/biginteger.js", function(){ 
     //hexToDecimal 
     var sum = new BigInteger(); 
     for (var i = 0;i<inputNumber.length;i++) 
     { 
      sum = sum.multiply(new BigInteger(16)).add(new BigInteger(hexToDecimalChar(inputNumber.charAt(i))));  
     } 

     //decimalToBase58 
     var rest = new Array(); 
     var base = new BigInteger(58); 
     var i = 0;   
     do 
     {  
      rest[i] = sum.remainder(base).valueOf(); 
      sum = sum.divide(base); 
      i++; 
     }while(sum.valueOf() > 0) 
     for(var j=0;j<i;j++) 
     { 
      output = output + decimalToBase58Char(rest[i-j-1]); 
     } 
     console.log(output);  
    }); 
    console.log(output); 
    return output; 
} 

我得到兩個輸出:

  • 「」
  • 「5KAvT6dYsRsGdZKQoh2tCLvoFanZhXcGZUwqNs3RtcsWMojkSnA」

「輸出」 是一個全局變量,但功能確實不返回第二個字符串,但第一個。我不知道如何將內部函數的值返回到外部函數。

這是非常晚,我試了很多。我想也許阿賈克斯可以提供幫助。但是我對Ajax沒有經驗。

+0

你做'$ .getScript'之前返回完成。 '.getScript'是異步的。 – Rudy

回答

0

不要加載使用$.getScript腳本,而只是一個<script>標籤。

<script src="JavaScript/biginteger.js"></script> 

然後你的函數可以不經GET腳本部分:

function hexToBase58(inputNumber) { 
    var output = ""; 
    //hexToDecimal 
    var sum = new BigInteger(); 
    for (var i = 0;i<inputNumber.length;i++) 
    { 
     sum = sum.multiply(new BigInteger(16)).add(
      new BigInteger(hexToDecimalChar(inputNumber.charAt(i))));  
    } 

    //decimalToBase58 
    var rest = new Array(); 
    var base = new BigInteger(58); 
    var i = 0;   
    do 
    {  
     rest[i] = sum.remainder(base).valueOf(); 
     sum = sum.divide(base); 
     i++; 
    }while(sum.valueOf() > 0) 
    for(var j=0;j<i;j++) 
    { 
     output = output + decimalToBase58Char(rest[i-j-1]); 
    } 
    return output; 
} 
+0

謝謝。有用。 – cryp71x