javascript - 解决 C 中的 javascript 计数器困境

标签 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

最佳答案

一句话,不是。闭包实际上是一种结构,它由函数指针、和捕获的状态(被关闭的变量)组成。你不能在 C 中捕获状态。你可以通过显式定义一个结构来保存状态,并将这个结构显式传递给函数来伪造一个闭包;但随后 a) 它变得困惑,b) 当您需要传递带有 counter 的结构时,不传递 counter 有什么意义?

您的特定代码可以通过将counter 显式定义为静态变量来完成;但它不能概括什么是真正的闭包。

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

关于javascript - 解决 C 中的 javascript 计数器困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35450135/

相关文章:

javascript - 如何使用 lodash 查找嵌套对象数组中的对象?

javascript - jQuery 自动完成 ui - 真的很奇怪 1 个字母延迟吗?

javascript - 表的 jQuery 模态

c - OpenGL 中的 MyReshape 函数不起作用

c++ - 如何将多个 C/C++ 库合并为一个?

reference - 为什么我不能从闭包中返回对外部变量的可变引用?

使用闭包在循环中创建的javascript计时器或间隔

JavaScript/jQuery 查找字符串

javascript - 函数返回是否需要被称为闭包

c - 为什么打印语句之间有间隙?