14

我有一些嵌套函数,例如

var freak = function() {
    var die = function() { ... }
    die(this);
}

据我所知,die每次freak调用该函数都会创建(分配)。

因此,如果freak被调用了很多时间,这意味着将浪费大量内存(假设die没有使用freak' 的上下文中的任何内容;换句话说,即使它只分配一次并在多个调用之间共享,它也可以正常工作freak-这就是我浪费的意思)。

我的理解正确吗?这是否意味着应该完全避免嵌套函数?

4

1 回答 1

25

据我所知,die每次freak调用该函数都会创建(分配)。

是的。这是真的。创建了一个新的函数对象。

因此,如果freak被调用很多时间,这意味着将浪费大量内存 [...]

对于“浪费”的一些非常小且通常无关紧要的价值。

如今,JavaScript 引擎非常高效,可以执行各种技巧/优化。

例如,只有函数对象(而不是实际的函数代码!)需要在内部“复制”。

[...] 这是否意味着应该完全避免嵌套函数?

不,没有实际的测试用例就没有 “浪费”问题。这个(嵌套和匿名函数的)习语在 JavaScript 中很常见,并且针对它进行了很好的优化。

Nested functions provide many benefits including self-documenting code, smaller self-contained lexical scopes, and other code isolation/organization advantages.

于 2013-11-05T00:22:06.477 回答