2015-06-20 151 views
-1

我遇到了我的代碼問題。 沒有發生函數f和g不叫,我只是想傳遞數組到一個函數,做的東西吧:功能在javascript中不起作用

<html> 
    <head> 
    <title>test</title> 
    </head> 
    <body> 
     <script lang="JavaScript" type="text/javascript"> 
     // l = prompt("Your name :"); // if i remove the comment it works 
      function f(E) { 


       l = prompt("Your name :"); 
       E["Name"] = l; 
       l = prompt("Your Age :"); 
       E["Age"] = l; 
       l = prompt("Your Note :"); 
       E["Note"] = l; 

      } 
     // l = prompt("Your name :"); // if i remove the comment it works 
      function g(E) { 
       for (ind in E) { 

        document.write("E[" + ind + "]=" + E[ind]); 
       } 
      } 
      E = newarray(3); 
      //l = prompt("Your name :"); // here if i remove the comment nothing happen 
      f(E); 
      g(E); 
</script> 

    </body> 
</html> 
+3

您的代碼使用的是一個名爲'newarray'的函數,它在您所顯示的代碼中沒有定義。如果你看看你的Web控制檯,你會看到一個很好的,明確的錯誤信息,指向失敗的那一行。 –

+2

「沒有任何事情」是不完全正確的(也語法;-)) - 您的代碼中有一個錯誤,防止進一步執行。你應該看看JS控制檯(不同的方式來訪問它取決於瀏覽器)看到err-msg .... – MBaas

回答

1

你不想數組可言,你要的對象。您可以使用對象初始化創建對象:

E = {}; 

附註1:您的代碼是所有的地方,以The Horror of Implicit Globals墮入。你需要聲明你的變量。


備註2;在頁面的主要解析完成後(例如,在prompt之後),將使用document.write隱式調用document.open,這將完全清除您的頁面。如果你想添加到頁面,使用DOM。


下面是與清理代碼的各種問題,包括變量的命名和功能命名  —有意義的名稱,是人們試圖幫助您對您有用,而有用的例子:

function getData() { 
 
    var data = {}; 
 
    data.Name = prompt("Your name :"); 
 
    data.Age = prompt("Your Age :"); 
 
    data.Note = prompt("Your Note :"); 
 
    return data; 
 
} 
 

 
function showData(data) { 
 
    for (var key in data) { 
 
    display("E[" + key + "]=" + data[key]); 
 
    } 
 
} 
 

 
function display(msg) { 
 
    var p = document.createElement('p'); 
 
    p.innerHTML = msg; 
 
    document.body.appendChild(p); 
 
} 
 

 
var d = getData(); 
 
showData(d);

+0

請你能告訴我爲什麼我不能使用document.write? – cip

+0

@cip:我做了:*「使用'document.write' ...會隱式地調用'document.open',它將徹底清除你的頁面...」*通過「清除」我的意思是它將刪除所有的網頁內容並將其替換。我想你的當前頁面沒有任何內容,所以這樣可以,但是在完成主解析之後,通常是'document.write'是一個禁忌。 (有些人認爲它總是*一個禁忌。) –

0

使用new Array(3)代替newarray(3)

<html> 
 
    <head> 
 
    <title>test</title> 
 
    </head> 
 
    <body> 
 
     <script lang="JavaScript" type="text/javascript"> 
 
     // l = prompt("Your name :"); // if i remove the comment it works 
 
      function f(E) { 
 

 

 
       l = prompt("Your name :"); 
 
       E["Name"] = l; 
 
       l = prompt("Your Age :"); 
 
       E["Age"] = l; 
 
       l = prompt("Your Note :"); 
 
       E["Note"] = l; 
 

 
      } 
 
     // l = prompt("Your name :"); // if i remove the comment it works 
 
      function g(E) { 
 
       for (ind in E) { 
 

 
        document.write("E[" + ind + "]=" + E[ind]); 
 
       } 
 
      } 
 
      E = new Array(3); 
 
      //l = prompt("Your name :"); // here if i remove the comment nothing happen 
 
      f(E); 
 
      g(E); 
 
</script> 
 

 
    </body> 
 
</html>

在這裏,您可能需要使用對象而不是數組。

<html> 
 
    <head> 
 
    <title>test</title> 
 
    </head> 
 
    <body> 
 
     <script lang="JavaScript" type="text/javascript"> 
 
     // l = prompt("Your name :"); // if i remove the comment it works 
 
      function f(E) { 
 

 

 
       E["Name"] = prompt("Your name :"); 
 
       E["Age"] = prompt("Your Age :"); 
 
       E["Note"] = prompt("Your Note :"); 
 

 
      } 
 
     // l = prompt("Your name :"); // if i remove the comment it works 
 
      function g(E) { 
 
       for (ind in E) { 
 

 
        document.write("E[" + ind + "]=" + E[ind]); 
 
       } 
 
      } 
 
      var E = {}; 
 
      //l = prompt("Your name :"); // here if i remove the comment nothing happen 
 
      f(E); 
 
      g(E); 
 
</script> 
 

 
    </body> 
 
</html>

+0

除非OP實際上並不需要數組,否則沒有任何理由在它不用於存儲索引0,1或2處的任何內容時給它3的長度。 –

+0

我同意。我只是指出了錯誤。 – Vikash

0

建議:

首先,它應該是E =新陣列(3); 由於E是一個全局變量(並在第一個函數中使用),因此最好在第一個函數之前聲明它。 雖然沒有必要,但在調試時爲每個提示提供自己的變量名將會有所幫助。