通过具体示例了解Javascript中的私有变量(Closure?)

时间:2015-07-16 12:41:00

标签: javascript

好的,我试图使用一个闭包对以下代码无效,以保持变量私有。我是javascript的新手,并阅读了一些关于闭包的帖子,但仍然无法绕过它们。下面,我有一个功能,每按一个特定按钮,就会显示一个数组中的下一个单词。我希望我在这个函数中使用的计数器变量(下面的“whatNumber”)不是全局但我无法弄清楚如何。这是我的简单代码:

var wordList = ["jumper", "stumpy", "smelly gumdrops", "awesome puttputt", "soilent green"];
var whatNumber = 0;

function changeWord(){
    if (whatNumber < wordList.length) {
        alert(wordList[whatNumber]);
        whatNumber++;
    }
};

1 个答案:

答案 0 :(得分:2)

function changeWord(){
    var wordList = ["jumper", "stumpy", "smelly gumdrops", "awesome puttputt", "soilent green"];
    var whatNumber = 0;
    return function alertWord(){
        if (whatNumber < wordList.length) {
            alert(wordList[whatNumber]);
            whatNumber++;
        }
    }
};
//to run this
var alertNewWord = changeWord();
alertNewWord() //jumper
alertNewWord() //stumpy

这带来了能够具有不同警报级别的不同功能的奖励。例如:如果您执行另一个var anotherAlertFn = changeWord()并且致电anotherAlertFn(),则会产生"jumper"。初始函数(即:alertNewWord())仍然具有自己的状态,即:whatNumber === 3anotherAlertFn具有whatNumber === 1。这可能非常有用,想象一个功能可以保持游戏中不同玩家的得分。每个玩家都可以使用相同的功能,但不能作弊(即:改变他们的分数),不会影响其他玩家的分数。