用具体的例子理解Javascript中的私有变量(闭包?)

Understanding Private Variables (Closure?) in Javascript with specific example

本文关键字:变量 闭包 Javascript      更新时间:2023-09-26

好的,我已经尝试在以下代码中使用闭包来保持变量私有,但无济于事。我是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++;
    }
};
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 === 3,而anotherAlertFnwhatNumber === 1。这可能非常有用,想象一下在游戏中为不同玩家记录分数的功能。每个玩家都可以在不作弊的情况下使用相同的功能(即:改变他们的分数),并且永远不会影响其他玩家的分数。