我在example in w3schools下方遇到了javascript闭包。我想知道这是否可以在 C编程中实现,因为我们在C中有类似的函数指针。但是,我无法通过简单的函数指针完全实现这一点实现。有人可以试一试吗?如果已经被问到,请重定向我。
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
add();
add();
add();
// the counter is now 3
答案 0 :(得分:3)
总之,不是真的。有效地,闭包是一个由函数指针组成的结构,如果你愿意的话,和捕获的状态(被关闭的变量)。你无法在C中捕获状态。你可以通过显式定义一个保持状态的结构来伪造一个闭包,并明确地将这个结构传递给函数;但是a)它变得混乱了,b)当你需要用counter
传递一个结构时,没有传递counter
是什么意思?
您可以通过将counter
明确定义为静态变量来完成您的特定代码;但实际上闭包不是一般的。
编辑:显然有一种机制可以为您传递结构:FFCALL。它仍然很难看。无论如何,移动到重复关闭。