2015-09-17 32 views
-2

我的隨機數可以正常工作,但我的櫃檯沒有。我的計數器應該每次點擊按鈕時添加一個,而只是顯示1,爲什麼沒有?我沒有得到任何控制檯錯誤。我不知道是什麼問題。我想使用閉包函數。我相信我會正確地做。閉合功能的JavaScript問題

HTML

<div> 
    <button type="button" onclick="showNumber()">Number</button> 
    <p id="counter"></p> 
    <p id="ran_num"></p> 
</div> 

的JavaScript

function showNumber() { 
    var number1 = 0; 
    var counter1 = 0; 

    var randomNum = (function() { 
     return function() { 
     return number1 = Math.floor((Math.random() * 100) + 1);} 
    })(); 

    var counterNum = (function() { 
     return function() { 
     return counter1 += 1} 
    })(); 

    document.getElementById("counter").innerHTML = "Count = " + counterNum(); 
    document.getElementById("ran_num").innerHTML = "Random Number = " + randomNum(); 
} 
+2

什麼是真的只是返回一個沒什麼特別給它的功能的IIFE點的? –

+1

在任何情況下,每次通話時間'showNumber',要重設'number1'和'counter1',重新創建新的'randomNum'和'counterNum'功能,這些都將完全獨立於任何以前調用運行。 –

+0

何時調用了'counterNum'? '我的計數器每次點擊按鈕時應該添加一個'=>'click'事件處理程序在哪裏? – pomeh

回答

4

如果你想counter1保持其showNumber調用之間的狀態,那麼它不應該是它裏面定義。相反,嘗試這樣的事:

(function() { // this is your closure 
    var counter = 0; 
    function randomNum() { 
     return Math.floor(Math.random()*100) + 1; 
    } 
    function counterNum() { 
     counter++; 
     return counter; 
    } 

    function showNumber() { 
     document.getElementById('counter').innerHTML = "Count = " + counterNum(); 
     document.getElementById('ran_num').innerHTML = "Random Number = " + randomNum(); 
    } 

    // make showNumber accessible in the global scope: 
    window.showNumber = showNumber; 
})(); 
+0

這是什麼考慮一個閉合功能林困惑,一個閉合功能是什麼,是它只是調用的函數中的一個函數,可以訪問函數的變量它的包裝。?。在? – kronis72

+0

要了解關閉看了這篇文章,應翔實,更容易理解的人關於這個問題http://javascriptissexy.com/understand-javascript-closures-with-ease/新 – EasyBB

0

使用您現有的大多數代碼

function showNumber() { 

    var randomNum = function() { 
     return Math.floor((Math.random() * 100) + 1); 
    } 

    var counterNum = (function() { 
     var counter = 0; 
     return function() { 
      return ++counter; 
     } 
    })(); 

    document.getElementById("counter").innerHTML = "Count = " + counterNum(); 
    document.getElementById("ran_num").innerHTML = "Random Number = " + randomNum(); 
}