用具体的例子理解Javascript中的私有变量(闭包?)
Understanding Private Variables (Closure?) in Javascript with specific example
好的,我已经尝试在以下代码中使用闭包来保持变量私有,但无济于事。我是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
,而anotherAlertFn
有whatNumber === 1
。这可能非常有用,想象一下在游戏中为不同玩家记录分数的功能。每个玩家都可以在不作弊的情况下使用相同的功能(即:改变他们的分数),并且永远不会影响其他玩家的分数。
相关文章:
- 子类访问父类's闭包变量
- 构造函数函数闭包变量
- 如何冻结函数's在闭包中的变量
- 使变量可用于不带闭包的异步调用
- 局部变量在闭包中丢失
- 其中是闭包中存储的变量-堆栈或堆
- javascript闭包:保护内部变量
- Javascript:附加字符串中的事件,闭包中的变量求值
- "可变变量可从闭包“”访问;在传递给Array.prototype.every的函数中
- JavaScript闭包和变量引用
- 如果全局上下文中的变量是属性,那么为了闭包的目的,如何区分它们
- 如何访问闭包中的变量
- 闭包中的本地变量从外部更改.这是一个javascript错误,或者我做错了什么
- 使用JavaScript回调函数了解变量作用域和闭包
- 递增并存储一个“;私人的“;使用闭包的变量
- 循环和局部变量内部的闭包
- 未使用JS闭包将变量传递给onClick函数
- 函数变量闭包
- 陷入javascript变量闭包
- 用具体的例子理解Javascript中的私有变量(闭包?)