首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >v8如何优化嵌套函数?

v8如何优化嵌套函数?
EN

Stack Overflow用户
提问于 2016-01-15 12:31:04
回答 2查看 528关注 0票数 2

有时,我看到的代码如下:

代码语言:javascript
复制
var doSomething = function(object){
    var results = []
    var doSomethingElse = function(object){
        ...
    }
    results.push(doSomethingElse(...))
    return results
}

组织方式是这样的,因为doSomethingElsedoSomething中只有意义。性能是可以接受的,因此这只是一个好奇: v8如何对嵌套函数进行优化?是每次调用doSomething()时实例化doSomethingElse()的一个新副本?

EN

回答 2

Stack Overflow用户

发布于 2016-01-15 12:33:45

我不知道V8内部结构,但闭包应该是很好的优化,我认为。但要回答您问题的另一部分:是的,每个doSomething调用都会创建一个新的doSomething。这是从语言的角度讲的。从技术上讲,一个聪明的JIT可能已经在优化这一点了。

如果您担心这一点,可以通过在自调用函数中定义doSomethingElse来保证只创建一次:

代码语言:javascript
复制
var doSomething = (function() {
  var doSomethingElse = function(object){ // only defined once
      ...
  };

  return function(object){ // the actual doSomething function
      var results = [];
      results.push(doSomethingElse(...));
      return results;
  };
}());

您只需要记住,这将在所有doSomethingElse调用中持久化doSomething。因此,如果您做了任何有状态的事情,您可能会看到一些意想不到的行为。

票数 0
EN

Stack Overflow用户

发布于 2016-01-15 12:53:38

我不知道它的优化程度有多好,我认为你永远不会得到这样的信息,这种问题太宽泛了,我知道,因为我以前问过这些问题,答案总是“试一试,分析一下”。

话又说回来,我不会回答这个问题。

我发现有两个源代码建议不要使用这些资源,因为它们为引擎添加了另一个步骤,因为引擎每次都需要创建函数,并向范围链添加一个级别。

这里的确切原因和测试如下:

http://code.tutsplus.com/tutorials/stop-nesting-functions-but-not-all-of-them--net-22315

https://developers.google.com/speed/articles/optimizing-javascript

这可能应该在评论中,但我还不能评论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34811144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档