2014-03-29 48 views
-6
<!DOCTYPE html> 
<html> 
<head> 
<script src="http://code.jquery.com/jquery-latest.js"></script> 
</head> 
<body> 
<div> 
    <canvas id="myCanvas" width="510" height="510"></canvas> 
    <script type="text/javascript"> 
     var c = document.getElementById("myCanvas"); 
     var ctx = c.getContext("2d"); 
     draw(); 

     function (ctx) { 
      cxt.moveTo(10, 10); 
      cxt.lineTo(500, 10); 
      cxt.stroke(); 
     } 
</div> 
</body> 
</html> 

這不然而工作,如果我刪除了函數draw(文件工作中),並把代碼中的腳本,它的工作原理,如下所示:功能不會HTML DOCTYPE

<script type="text/javascript"> 
    var c=document.getElementById("myCanvas"); 
    var cxt=c.getContext("2d"); 
    cxt.moveTo(10,10); 
    cxt.lineTo(500,10); 
    cxt.stroke(); 
</script> 

我想知道如何使功能工作

+0

爲什麼你包括jQuery庫,然後從來沒有使用它? –

+0

你沒有關閉''標記,你的函數語法是無效的。 –

+1

我會說這會產生'draw is not defined'錯誤?事實上,draw並沒有被定義,所以在draw()之後的所有東西;將不會執行。 – Vincent

回答

2

這兩個代碼片段是不等效的。第一個例子定義(並立即丟棄)一個匿名函數。該功能從未被調用,這就是爲什麼它看起來像你的代碼「不起作用」。

修復缺口,這成爲相當明顯:

var c = document.getElementById("myCanvas"); 
var ctx = c.getContext("2d"); 
draw(); 

// Syntax error here 
function(ctx){ 
    cxt.moveTo(10,10); 
    cxt.lineTo(500,10); 
    cxt.stroke(); 
} 

正如評論者已經指出的那樣,第一個例子也少了一種</script>關閉標籤。我不知道你想要做什麼不同於第二個例子,這對你來說應該很好,但我向你保證 - 問題有什麼與doctype無關。

+0

第一個沒有定義和放棄匿名函數。如果要評估腳本,它將永遠不會起作用,因爲該函數將是一個語法錯誤。 –

+0

是的,解釋器會嘗試將其解析爲函數聲明,並在它看到沒有名稱時拋出它, 按要求。把它作爲一個表達式,它會成功*(至少通過解析階段)*。 –

+0

是的,你說得對。 –

0

也許你應該先學習如何設置&調用函數。

這將設置一個功能:

function draw(ctx) { 
    // etc 
} 

這調用它,與ctx作爲參數:

draw(ctx); 

不要忘記通過論證。代碼中有兩個名爲ctx的變量,但它們的作用域不同。不要只假定你的函數應該知道函數內應該採用哪個值ctx