所以似乎Javascript中没有函数静态变量。我试图在函数内增加一个变量,但我不想这样做:
function countMyself() {
if ( typeof countMyself.counter == 'undefined' ) {
// It has not... perform the initilization
countMyself.counter = 0;
}
}
我想用闭包来做,但我很难理解这些。
有人在另一个问题中暗示了这一点:
var uniqueID = (function() {
var id = 0;
return function() { return id++; };
})();
但是当我提醒uniqueID时它所做的就是打印这一行:return function(){return id ++; };
所以我想知道如何在不污染全局范围的情况下增加函数中的变量。
答案 0 :(得分:5)
你必须调用 uniqueID
- 你不能只是引用就好像它是一个变量:
> uniqueID
function () { return id++; }
> uniqueID()
0
> uniqueID()
1
答案 1 :(得分:1)
显式地分配给uniqueID而不是从立即调用的lambda返回它可能会使事情变得更清楚:
var uniqueId; //declare uniqueId in the outer scope
function initializeUniqueId(){
var id=0;
uniqueId = function(){
return id++;
}
}
initializeUniqueId();
console.log( uniqueId ); //what you are currently doing
console.log( uniqueId() }; //what you should be doing.
与我刚写的(function(){}())
相比,版本的优点是初始化函数是匿名的,你只需要编写一次“uniqueId”。
答案 2 :(得分:0)
只需查看此代码即可 我想增加' _a'变量
ES6 中的
let a = () => {
let _a = 1;
return () => _a++;
}
let clo = a();
for (var i = 0; i < 5; i++) {
console.log(clo());
}
在 ES5
中var a = function() {
var _a = 1;
return function() {
return _a++;
}
}
var clo = a();
for (var i = 0; i < 5; i++) {
console.log(clo());
}