首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScriptCore嵌套的“调用”性能问题

JavaScriptCore嵌套的“调用”性能问题
EN

Stack Overflow用户
提问于 2014-12-19 22:40:27
回答 1查看 3.8K关注 0票数 53

如果我定义一个函数

inc = function(x) { return x + 1 }

并对其进行嵌套调用

inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(inc(1)))))))))))))))))))))

这将产生值22。如果我修改嵌套表达式,改为使用call,为this传入null,作为

inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, 1)))))))))))))))))))))

这也将产生值22

但是,在JavaScriptCore上,第二种形式似乎消耗O(2^n)内存,其中n是嵌套调用的数量。如果我在火狐或Chrome中尝试这个JavaScript,情况就不是这样了,所以它似乎与JavaScriptCore隔离开来。

我几乎没有JavaScript经验(几乎没有)。我不了解各种JavaScript实现可能产生的权衡,也不知道示例代码在某些实现中代价高昂(为闭包或类似的实现提供通用支持),而在另一些实现中却很有效是否合理。

我的问题是:这段代码本身就有问题吗?是否应该以不同的方式重写它的结构?或者代码没问题-- JavaScriptCore只是有个bug吗?

我做了一些实验,重构一些对临时函数的内部调用将“截断”内存加倍的行为

var temp1 = inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, 1)))))));

var temp2 = inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, temp1)))))));

inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, inc.call(null, temp2)))))));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-22 02:36:51

根据对这个问题的评论,大家一致认为所编写的代码没有根本问题,而这是JavaScriptCore中的一个错误。

对于ticket filed,它已被确认为可重复使用,并已被导入苹果的雷达系统。

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

https://stackoverflow.com/questions/27568249

复制
相关文章

相似问题

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