我试图在没有重新初始化的情况下调用函数(希望我在这里使用正确的单词)每次调用它时。因此,第一次调用时,它应该初始化,但在初始化之后,它应该只使用该引用。
这是我正在尝试使用的代码。
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)
但这不起作用。结果是一样的。
答案 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
进行操作
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;