JavaScript全局添加功能

时间:2016-03-21 23:21:29

标签: javascript

var num;

function newNum(num) {
    num += 1;
    return num;
}

所以我试图在google工作表中创建一个新功能,其中newNum()将取任何数字并将其添加到之前的(全局)数字。

即。 newNum(1)将打印2 newNum(5)现在会打印7 newNum(3)现在会打印10,依此类推。

提前谢谢大家!

2 个答案:

答案 0 :(得分:2)

如果您希望每次调用时都将其添加到全局总计中,那么您必须为全局变量和函数参数指定不同的名称,以便每个都可以访问,并且还需要将全局变量初始化为所需的初始值

var num = 1;

function newNum(add) {
  num += add;
  return num;
}

log(newNum(1));
log(newNum(5));
log(newNum(3));

// log output in the snippet
function log(x) {
  var div = document.createElement("div");
  div.innerHTML = x;
  document.body.appendChild(div);
}

为了更好地封装总数并避免将其暴露为公共全局,您也可以这样做:

var newNum = (function() {
    var num = 1;

    return function(add) {
      num += add;
      return num;
    }
})();

log(newNum(1));
log(newNum(5));
log(newNum(3));

// log output in the snippet
function log(x) {
  var div = document.createElement("div");
  div.innerHTML = x;
  document.body.appendChild(div);
}

答案 1 :(得分:0)

我不了解Google表格,但在普通JS中执行此操作的常用方法是使用一个函数,该函数本身会返回一个"关闭"包含总数的变量,而不将该总数视为全局变量:

function makeAccumulator() {
    var total = 0;
    return function(n) {
        total += n;
        return total;
    }
}

var newNum = makeAccumulator();

通过这个你可以制作多个累加器,每个累加器都会跟踪它们自己的总数:

var newNum2 = makeAccumulator();