2011-10-12 49 views
0

我有IM時,點擊輸入 - 我想看到「1,2,3,4 ......」(每按一下)爲什麼執行功能不起作用?

<input type='button' value='press' onclick='Clicked();' /> 

<script> 
    var t 
    function Clicked() 
     { 
     t=func; 
     t(); 
     } 


    function func() 
     { 
     var count=0; 
     return new function() // <=== new or not new ??? 
      { 
      count++; 
      alert(count); 
      } 
     } 
</script>  

If im adding the 'new' in the return and click , it says : '1,1,1,1,...' 

警報,如果im去掉「新」它不工作...

我的目標就是用這個來獲得:「1,2,3,4 ......」

能有人向我解釋發生了什麼?

回答

2

您需要使用返回功能:styrr

var t = func() 
function Clicked() { 
    t(); 
} 

function func() { 
    var count=0; 
    return function() { 
     count++; 
     alert(count); 
    } 
} 

Example

+0

我選擇了這個問題,因爲它沒有在根環境上關閉。但爲什麼你用'()'寫'var t = func()'?你不想執行它,你只是想引用內部func ...?沒有?我認爲它應該是這樣的:'var t = func;'然後再寫t()...我的錯誤在哪裏? –

+0

你實際上正在返回一個函數。內部函數不是用func()來執行的,而是爲返回的函數創建一個引用。 – Joe

1

您必須將count聲明放在「func」函數之外並放入全局名稱空間。就像這樣:

var count=0; 
function func() { 
    count++; 
    alert(count); 
} 
+0

太快,我 – Justin

1

你正在創建一個新的變種數每次clickevent火災。你應該把變種數= 0之外的功能作爲全局變量的時間..

噢和順便說一句,拋出返回的東西,請這將正常工作:

var count = 0; 
function func() 
{ 
    count++; 
    alert(count); 
} 

並調用此方法是這樣的:func();

1

您正在獲得1,1,1,1,因爲您每次撥打func()時都重新定義了計數。

在你的情況,你要麼需要把計數變量在全局範圍內:

var t; var count = 0;

或者改變你正在做的事情一點的方式:


var t = 0; 
function Clicked(){ 
    t = func(t); 
} 


function func(count){ 
    count++; 
    alert(count) 
    return count; 
} 

我個人像第二個一樣。您有較少的全局變量,少了一個函數聲明,它是清潔

1
var t 
function Clicked() 
{ 
    t=func; 
    t(); 
    } 

var count=0; 
function func() 
{ 

    return new function() // <=== new or not new ??? 
    { 
     count++; 
     alert(count); 
    } 
}