无需每次重新初始化即可调用函数

时间:2016-09-25 06:12:28

标签: javascript function

我试图在没有重新初始化的情况下调用函数(希望我在这里使用正确的单词)每次调用它时。因此,第一次调用时,它应该初始化,但在初始化之后,它应该只使用该引用。

这是我正在尝试使用的代码。

JSFiddle

console.clear();

function mainFunction(e) {
  var index = 0;

  function subFunction() {
    console.log(index++);
  }
  return subFunction();
}

window.addEventListener('click', mainFunction)

每次index被调用时,

mainFunction应增加1。显而易见的解决方案是使index成为一个全局变量(或者只是mainFunction之外的变量)。但我需要index to stay in mainFunction`。

如何每次都使index递增(使用相同的引用)mainFunction被调用?

我尝试将mainFunction分配给变量,然后在事件监听器中调用变量,

var test = mainFunction;
window.addEventListener('click', test)

但这不起作用。结果是一样的。

4 个答案:

答案 0 :(得分:3)

您应该按如下方式更正代码;

console.clear();

function mainFunction(e) {
  var index = 0;

  function subFunction() {
    console.log(index++);
  }
  return subFunction; // <<< don't invoke subfunction
}

window.addEventListener('click', mainFunction()) // <<< invoke mainfunction

答案 1 :(得分:0)

也许尝试关闭?

var main = (function () {
var index = 0;
return function () {return index += 1;}
})();

main()
main()

//索引应为2 ...

explain- 变量main被赋予自调用函数的返回值。

自调用函数只运行一次。 index只初始化一次。

答案 2 :(得分:0)

如果您不想使index全局(或者mainFunction更高一个范围),您可以使用闭包:

var mainFunction = (function () {
    var index = 0;
    return function () {return console.log(index++);}
})();
<button onclick="mainFunction()">Click</button>

答案 3 :(得分:0)

使用OOP概念是实现这一目标的正确方法。以下内容对您有所帮助。 如果您想以ES6方式进行,请按照this babel example

进行操作

&#13;
&#13;
1 - np.in1d(np.arange(Mo.shape[1]),Mo.col)
&#13;
var mainFunction = function(val) {
  this.index = val //initialize this with the fn parameter or set a atatic value
}

mainFunction.prototype.subFunction = function() {
  return this.index++
}

var instance = new mainFunction(0)

window.addEventListener('click', function() {
  console.log(instance.subFunction())
})
&#13;
&#13;
&#13;