c++导jsb接口,c++调用注册的js回调函数, js模块被回收后闪退

调用回调是这样的,_jsCallback是通过C++接口注册的回调函数,调用cc.sys.cleanScript()后再调用JS_CallFunctionValue会闪退,请问要如何不被回收回调函数

JSContext *cx = ScriptingCore::getInstance()->getGlobalContext();
JS::RootedValue callback(cx, OBJECT_TO_JSVAL(_jsCallback));
if (!callback.isNull()) {
JS::RootedObject global(cx, ScriptingCore::getInstance()->getGlobalObject());
JSAutoCompartment ac(cx, global);
JS::RootedValue retval(cx);
jsval valArr[1];
valArr[0] = INT_TO_JSVAL((int32_t)1);
JS_CallFunctionValue(cx, JS::NullPtr(), callback,JS::HandleValueArray::fromMarkedLocation(1, valArr), &retval);
}

没人自己回答一下吧,改成JSFunctionWrapper形式就好了,JSFunctionWrapper里面把this和callback通过js_add_object_reference都挂到了jsb._root下面所以GC的时候不会回收