解决C中的javascript计数器困境

时间:2016-02-17 07:11:50

标签: javascript c closures function-pointers

我在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

1 个答案:

答案 0 :(得分:3)

总之,不是真的。有效地,闭包是一个由函数指针组成的结构,如果你愿意的话,和捕获的状态(被关闭的变量)。你无法在C中捕获状态。你可以通过显式定义一个保持状态的结构来伪造一个闭包,并明确地将这个结构传递给函数;但是a)它变得混乱了,b)当你需要用counter传递一个结构时,没有传递counter是什么意思?

您可以通过将counter明确定义为静态变量来完成您的特定代码;但实际上闭包不是一般的。

编辑:显然有一种机制可以为您传递结构:FFCALL。它仍然很难看。无论如何,移动到重复关闭。