Javascript 计数器函数的设定值

Javascript 计数器函数的设定值,javascript,Javascript,以下代码将允许计数器函数每次递增一个计数器();被称为 function One() { var counter = function(initial) { var c = initial || 0; return function() { return c++; }; }(0); Too(counter); } function Too(counterArg) { counter();

以下代码将允许计数器函数每次递增一个计数器();被称为

function One() {  
    var counter = function(initial) {
        var c = initial || 0;
        return function() {
            return c++;
        };
    }(0);
    Too(counter);
}

function Too(counterArg) {
    counter();
}

有什么我可以替换的吗;有了它,计数器会变小吗?或者更好的是,我有没有办法设置计数器的值?比如计数器=0或计数器=20?我还需要远离全局变量

您可以在javascript中将函数指定为变量,所以现在您可以这样做了

var counter = 0;
var step = 1; // or 20 or whatever
var method = null;

function increment () {
  counter += step;
}

function decrement () {
  counter -= step;
}

method = icrement;
method();

您可以在javascript中将函数指定为变量,所以现在您可以这样做

var counter = 0;
var step = 1; // or 20 or whatever
var method = null;

function increment () {
  counter += step;
}

function decrement () {
  counter -= step;
}

method = icrement;
method();

您可以在javascript中将函数指定为变量,所以现在您可以这样做

var counter = 0;
var step = 1; // or 20 or whatever
var method = null;

function increment () {
  counter += step;
}

function decrement () {
  counter -= step;
}

method = icrement;
method();

您可以在javascript中将函数指定为变量,所以现在您可以这样做

var counter = 0;
var step = 1; // or 20 or whatever
var method = null;

function increment () {
  counter += step;
}

function decrement () {
  counter -= step;
}

method = icrement;
method();

首先,代码中有一个小的输入错误;你大概是说

function Too(counterArg) {
    counterArg();  // this was just `counter` originally; that will be undefined
}
其次,
c++
是一种有点奇怪的计数器方式,因为它返回
c
,然后递增
c
,所以计数器将从0开始,这可能不是您想要的。 (我承认,每当我看到代码中的C++时,我会咯咯笑。 好的,关于主要问题:我将通过向计数器函数添加一个方法来实现,该函数名为,例如,
set

function One() {  
    var counter = function createCounter(initial) {
        var c = initial || 0;
        function counter() {
            return ++c;
        }
        counter.set = function(n) {
            c = n;
        };
        return counter;
    }(0);
    Too(counter);
}

function Too(counterArg) {
    counter(); // 1
    counter.set(20);  // `c` is now 20
    counter(); // 21
    counter(); // 22
}

这是因为
计数器
函数创建了所谓的闭包。这在JavaScript中是一个相当常见的概念,关于闭包有很多很好的问题和答案,所以如果您不知道这个概念,您应该看看。基本上,即使在匿名函数(我重命名为
createCounter
)返回后,变量
c
仍然存在,并且可以从
createCounter
中的任何代码访问。这就是
计数器
功能的工作原理<但是,code>c不能被
createCounter
之外的任何代码访问,因此如果您想使用它做任何事情,必须将该代码放入
createCounter
中。这就是我添加的
计数器.set
方法的作用。由于它位于
createCounter
中,因此可以自由修改
c

,首先,您的代码中有一个小的输入错误;你大概是说

function Too(counterArg) {
    counterArg();  // this was just `counter` originally; that will be undefined
}
其次,
c++
是一种有点奇怪的计数器方式,因为它返回
c
,然后递增
c
,所以计数器将从0开始,这可能不是您想要的。 (我承认,每当我看到代码中的C++时,我会咯咯笑。 好的,关于主要问题:我将通过向计数器函数添加一个方法来实现,该函数名为,例如,
set

function One() {  
    var counter = function createCounter(initial) {
        var c = initial || 0;
        function counter() {
            return ++c;
        }
        counter.set = function(n) {
            c = n;
        };
        return counter;
    }(0);
    Too(counter);
}

function Too(counterArg) {
    counter(); // 1
    counter.set(20);  // `c` is now 20
    counter(); // 21
    counter(); // 22
}

这是因为
计数器
函数创建了所谓的闭包。这在JavaScript中是一个相当常见的概念,关于闭包有很多很好的问题和答案,所以如果您不知道这个概念,您应该看看。基本上,即使在匿名函数(我重命名为
createCounter
)返回后,变量
c
仍然存在,并且可以从
createCounter
中的任何代码访问。这就是
计数器
功能的工作原理<但是,code>c不能被
createCounter
之外的任何代码访问,因此如果您想使用它做任何事情,必须将该代码放入
createCounter
中。这就是我添加的
计数器.set
方法的作用。由于它位于
createCounter
中,因此可以自由修改
c

,首先,您的代码中有一个小的输入错误;你大概是说

function Too(counterArg) {
    counterArg();  // this was just `counter` originally; that will be undefined
}
其次,
c++
是一种有点奇怪的计数器方式,因为它返回
c
,然后递增
c
,所以计数器将从0开始,这可能不是您想要的。 (我承认,每当我看到代码中的C++时,我会咯咯笑。 好的,关于主要问题:我将通过向计数器函数添加一个方法来实现,该函数名为,例如,
set

function One() {  
    var counter = function createCounter(initial) {
        var c = initial || 0;
        function counter() {
            return ++c;
        }
        counter.set = function(n) {
            c = n;
        };
        return counter;
    }(0);
    Too(counter);
}

function Too(counterArg) {
    counter(); // 1
    counter.set(20);  // `c` is now 20
    counter(); // 21
    counter(); // 22
}

这是因为
计数器
函数创建了所谓的闭包。这在JavaScript中是一个相当常见的概念,关于闭包有很多很好的问题和答案,所以如果您不知道这个概念,您应该看看。基本上,即使在匿名函数(我重命名为
createCounter
)返回后,变量
c
仍然存在,并且可以从
createCounter
中的任何代码访问。这就是
计数器
功能的工作原理<但是,code>c不能被
createCounter
之外的任何代码访问,因此如果您想使用它做任何事情,必须将该代码放入
createCounter
中。这就是我添加的
计数器.set
方法的作用。由于它位于
createCounter
中,因此可以自由修改
c

,首先,您的代码中有一个小的输入错误;你大概是说

function Too(counterArg) {
    counterArg();  // this was just `counter` originally; that will be undefined
}
其次,
c++
是一种有点奇怪的计数器方式,因为它返回
c
,然后递增
c
,所以计数器将从0开始,这可能不是您想要的。 (我承认,每当我看到代码中的C++时,我会咯咯笑。 好的,关于主要问题:我将通过向计数器函数添加一个方法来实现,该函数名为,例如,
set

function One() {  
    var counter = function createCounter(initial) {
        var c = initial || 0;
        function counter() {
            return ++c;
        }
        counter.set = function(n) {
            c = n;
        };
        return counter;
    }(0);
    Too(counter);
}

function Too(counterArg) {
    counter(); // 1
    counter.set(20);  // `c` is now 20
    counter(); // 21
    counter(); // 22
}
这是因为
计数器
函数创建了所谓的闭包。这在JavaScript中是一个相当常见的概念,关于闭包有很多很好的问题和答案,所以如果您不知道这个概念,您应该看看。基本上,即使在匿名函数(我重命名为
createCounter
)返回后,变量
c
仍然存在,并且可以从
createCounter
中的任何代码访问。这就是
计数器
功能的工作原理<但是,code>c不能被
createCounter
之外的任何代码访问,因此如果您想使用它做任何事情,必须将该代码放入
createCounter
中。这就是我添加的
计数器.set
方法的作用。因为它在
cr范围内