Javascript 调用函数而不必每次重新初始化

Javascript 调用函数而不必每次重新初始化,javascript,function,Javascript,Function,我试图在每次调用函数时不重新初始化它(希望我在这里使用了正确的词)。所以第一次调用它时,它应该初始化,但在初始化之后,它应该只使用该引用 这是我试图使用的代码 console.clear(); 函数main函数(e){ var指数=0; 函数子函数(){ log(index++); } 返回子函数(); } window.addEventListener('click',main函数)您应该按如下方式更正代码 console.clear(); function mainFunction(e

我试图在每次调用函数时不重新初始化它(希望我在这里使用了正确的词)。所以第一次调用它时,它应该初始化,但在初始化之后,它应该只使用该引用

这是我试图使用的代码

console.clear();
函数main函数(e){
var指数=0;
函数子函数(){
log(index++);
}
返回子函数();
}

window.addEventListener('click',main函数)
您应该按如下方式更正代码

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
console.clear();
函数main函数(e){
var指数=0;
函数子函数(){
log(index++);
}

return子函数;//您应该按如下方式更正代码

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
console.clear();
函数main函数(e){
var指数=0;
函数子函数(){
log(index++);
}
返回子函数;//是否可以尝试闭包

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

main()
main()
//索引应该是2

说明- 变量main被分配一个自调用函数的返回值

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

可以尝试闭包吗

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

main()
main()
//索引应该是2

说明- 变量main被分配一个自调用函数的返回值


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

如果您不想使
索引成为全局的(或使
主函数的作用域更高),可以使用闭包:

var mainformation=(函数(){
var指数=0;
返回函数(){return console.log(index++);}
})();

单击
如果您不想将
索引
设为全局(或将
main函数
设为更高的一个范围),可以使用闭包:

var mainformation=(函数(){
var指数=0;
返回函数(){return console.log(index++);}
})();

单击
使用OOP概念是实现这一目标的正确方法。以下内容应该对您有所帮助。 如果你想用ES6的方式做这件事,请遵循

var mainFunction=函数(val){
this.index=val//使用fn参数初始化该参数或设置一个ATATATIC值
}
mainFunction.prototype.subFunction=函数(){
返回此.index++
}
var实例=新的main函数(0)
window.addEventListener('click',function(){
console.log(instance.subFunction())
})

单击查看结果

使用OOP概念是实现这一目标的正确方法。以下内容应该对您有所帮助。 如果你想用ES6的方式做这件事,请遵循

var mainFunction=函数(val){
this.index=val//使用fn参数初始化该参数或设置一个ATATATIC值
}
mainFunction.prototype.subFunction=函数(){
返回此.index++
}
var实例=新的main函数(0)
window.addEventListener('click',function(){
console.log(instance.subFunction())
})


单击查看结果

窗口。addEventListener('Click',main function());
返回子函数;
窗口。addEventListener('Click',main function());
返回子函数;
立即调用它,以后不调用它。我已经在上面写了这个评论。不知道为什么还要写这个作为答案???你不想每次单击都调用
子函数
吗?如果是,这段代码可以实现that@fvgs哦,他说得对!我做了
返回子函数()
即带括号。谢谢!我如何使其不立即调用,即在页面加载时?它应该只有在用户单击时才会被调用?@Jessica我建议您阅读Well.的第2章。这很可能是“最好的”这本书写的是关于JS的基础知识。你应该购买并阅读所有内容。这会立即调用它,以后不会调用它。我已经在上面写了这篇评论。不知道为什么还要写这篇文章作为答案???你不想每次点击都调用
子函数
?如果是的话,这段代码就实现了that@fvgs哦,他说得对!我做了
return subFunction()
即带括号。谢谢!我如何使它不立即调用,即在页面加载时?它应该只有在用户单击时才会被调用?@Jessica我建议您阅读Well的第2章。这很可能是“最好的”这本书写的是关于JS的基础知识。你应该购买并阅读所有内容。为什么自调用函数只运行一次?这是一个很好的解释为什么自调用函数只运行一次?这是一个很好的解释为什么自调用函数只运行一次?为什么自调用函数只运行一次?你不认为至少,使用OOP会使事情变得过于复杂吗?不,遵循编程模式不是一件坏事。@Jessica by这是因为你通过创建新实例来重用MainFunctions。但我从未见过一个库使用类来处理这样的小事情。@Jessica这只是一个很好的实践。它提高了可重用性。如果你关心可伸缩性,你应该遵循低一点。所有主要的库都使用OOP概念进行扩展。你不觉得使用OOP会使事情变得过于复杂吗?不,遵循编程模式不是一件坏事。@Jessica by这是你通过创建新实例来重用维护功能。但是我从来没有见过一个库使用类来处理这样的小事情。@Jessica这只是一个很好的例子它提高了可重用性。如果您关心可伸缩性,您应该遵循这一点。所有主要的库都使用OOP概念进行扩展。