根据 Spidermonkey 的用户指南
https://developer.mozilla.org/En/SpiderMonkey/JSAPI_User_Guide
... jsval 本身并不能保护其所指对象免受垃圾收集器的影响...
我对这句话的理解是,如果我们通过 JS_NewStringCopyZ() 创建一个 JSString,那么返回的值可以随时被 gc'ed。例如
JSString *str=JS_NewStringCopyZ(cx, "hello world");
JS_GC(cx);
//..now my "hello world" JSString is gone
那么我们如何防止上面的str被 gc'ed 呢?我注意到有一个JS_EnterLocalRootScope () 函数,我可以在 JSNative 函数的开头调用它。不幸的是,它现在已被弃用。那么防止gc的正确方法应该是什么?