我有一个在webkit-gtk浏览器中通过JavaScriptCore扩展JavaScript的应用程序。 现在我有几个类,我添加到全局上下文,如下所示: void create_js(gpointer context, char* className, JSClassDefinition clasDefinition) { JSClassRef classDef = JSClassCreate(&clasDefinition); JSObjectRef classObj = JSObjectMake(context, classDef, context); JSObjectRef globalObj = JSContextGetGlobalObject(context); JSStringRef str = JSStringCreateWithUTF8CString(className); JSObjectSetProperty(context, globalObj, str, classObj, kJSPropertyAttributeNone, NULL); JSStringRelease(str); } 现在,我还想将这些类添加到WebWorker的上下文中,所以我可以从JS中实例化的worker中调用它们。 我试过让Worker对象如下所示: JSStringRef workerStr = JSStringCreateWithUTF8CString("Worker"); JSObjectRef worker = JSObjectGetProperty(context, globalObj, workerStr, NULL); JSObjectSetProperty(context, worker, str, classObj, kJSPropertyAttributeNone, NULL); […]
如果我定义一个函数 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 。 如果我修改嵌套expression式而不是使用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上,第二种forms似乎消耗了O (2 ^ n )内存,其中n是嵌套调用的数量。 如果我在Firefox或Chrome中尝试这种JavaScript,那么情况并非如此,因此它似乎与JavaScriptCore隔离。 我有很less的JavaScript经验(几乎没有)。 我没有感觉到各种JavaScript实现可能做出的折衷,也不知道示例代码在某些实现中是否昂贵(为闭包等提供通用支持)是合理的,而在其他实现中则是有效的。 我的问题是:这个代码固有问题吗? 是否应该改写成不同的结构? 还是代码好 – JavaScriptCore只是有一个bug? 我已经做了一些实验,重构一些临时内部调用会“截断”内存加倍行为 var […]