gpt4 book ai didi

javascript - Node .js : Nested function style code is harmful than ES6 class style?

转载 作者:行者123 更新时间:2023-12-03 07:20:53 26 4
gpt4 key购买 nike

(请原谅我的英文)

下面是一个非常简化的示例代码。

function test(limit) {
let count = 0, undone = true;

function inc() {
// do something
count++;
if(count == limit)
undone = false;
}

while(undone) {
// do something
inc();
}
}

我经常使用嵌套函数样式的函数,例如上面示例中的 inc()。因为共享变量很方便。
然而,有人告诉我,我的编码风格是非常有害的。因为每次调用 test() (在上面的例子中), inc() 都会在内存中重复分配。他建议我改用 ES6 类样式代码。

我不同意他的观点,但不确定。嵌套函数风格的代码真的比 ES6 类风格的代码更有害吗?

Edit

I performed a simple benchmark for this question, as postedbelow.

https://stackoverflow.com/a/51530670/7339376

The result is somewhat astonishing to me. I was wrong. Myadviser is right.

EditAt first, the title of this post was "Closure style code is...". I I modified it to "Nested function style code is...".

最佳答案

对于上面的示例,使用闭包来维护私有(private)变量与使用类来维护同一事物在理论上没有显着差异。

使用闭包将在每次调用 test 函数时分配一个新的函数对象。

每次调用 test 函数时,使用类都会分配一个新对象。

理论上,两者都分配内存并花时间调用构造函数。

有些人可能反对函数每次都需要重新编译而类中的方法只编译一次这一事实。请注意,闭包也可以优化为只编译一次。所以这只是一个微优化问题。

在学术上,闭包和类是等价的。我认为我们首先理解这一点是在 Lisp 使用闭包将对象和类实现为一个库而没有对语言进行任何修改时,但从那时起,已经发表的研究论文证明闭包和类在计算上是等价的——只是它们的特性集略有不同。

在优化方面,您唯一应该做的就是对代码进行基准测试。如果它足够好,那么不要更改您的代码。任何相反的意见都只是宗教/政治的,应该被忽略。如果您需要更好的性能,那么分析您的代码以找到真正的瓶颈。这可能是瓶颈,也可能不是。不要优化不会减慢您速度的代码。

在一天结束时,尽可能编写最清晰、最易读的代码。

关于javascript - Node .js : Nested function style code is harmful than ES6 class style?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51529670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com