首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免使用递增函数的全局变量?

如何避免使用递增函数的全局变量?
EN

Stack Overflow用户
提问于 2012-09-17 08:29:55
回答 3查看 275关注 0票数 0

下面是我的自执行函数:

代码语言:javascript
复制
var incrementInt = (function() {
    var manyOut = 10;

    if(incInt) {
        incInt+=manyOut;
    } else {
        var incInt = 0;
    }

    return {
        s: incInt,
        m: manyOut
    };
})();

我已经将变量incInt和manyOut私有化,并将变量incrementInt绑定到返回的对象。

我的目标是创建一个函数,该函数返回一个对象,其中一个属性是一个整数,该整数每次被调用时都会递增。我希望增量变量的作用域尽可能窄。

我在上面的解决方案中遇到的问题是,每次调用函数时都会重新初始化变量incInt。由于其在函数中的作用域,该变量将自动销毁。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-17 08:38:09

您需要使用方法来添加和获取变量incInt

代码语言:javascript
复制
var incrementInt = (function() {
    var manyOut = 10,
        incInt = 0;

    return {
        add: function() {
            return incInt += manyOut;
        },
        getInt: function() {
            return incInt;
        }
    };

})();


var a = incrementInt;


a.add();
a.add();

a.getInt(); // 20​​​​​​
票数 1
EN

Stack Overflow用户

发布于 2012-09-17 08:33:11

您可以像这样创建和对象

代码语言:javascript
复制
function incr () {
  var i = 0;

  this.inc = function() {
    i++;
  }
}

var incrInt = new incr();

// somewhere in you code
incrInt.inc();
票数 1
EN

Stack Overflow用户

发布于 2012-09-17 08:34:27

代码语言:javascript
复制
var f = function() { var c=0; return function() { return c++; }} ()
> f()
0
> f()
1
> f()
2

基本上,利用Javascript的功能来使用函数创建作用域和闭包来捕获局部变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12451877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档