创建 / 销毁

// 调用方提供缓冲区(destroy 时不释放)
char mem[8192];
JsEngine* js = JsEngine::create(mem, sizeof(mem));
JsEngine::destroy(js);

// 引擎内部分配(destroy 时释放)
JsEngine* js2 = JsEngine::create(8192);
JsEngine::destroy(js2);

执行 JavaScript

JsValue v = js->eval("1+2+3");
const char* s = js->str(v); // "6" 或错误信息

callGlobal — 比 eval 调用字符串更高效

js->eval("function add(a,b){return a+b;};");

JsValue argv[2] = {JsEngine::makeNumber(10), JsEngine::makeNumber(32)};
JsValue r1 = js->callGlobal("add", argv, 2); // 42

JsValue r2 = js->callGlobal("add", {
  JsEngine::makeNumber(1),
  JsEngine::makeNumber(2),
}); // 3

错误情况:bad call'name' not found'name' not callable

注入原生 C++ 函数

JsValue add(JsEngine* js, JsValue* args, int nargs) {
  if (!JsEngine::chkArgs(args, nargs, "dd"))
    return js->makeError("type mismatch");
  return JsEngine::makeNumber(
      JsEngine::getNumber(args[0]) + JsEngine::getNumber(args[1]));
}

js->set(js->glob(), "add", JsEngine::makeFunction(add));

chkArgs 格式字符

字符类型
dnumber
bboolean
sstring
j任意 JS 值

值工厂方法

运行时控制

js->setGcThreshold(1024);
js->setMaxCss(5000);
js->gc();

size_t total=0, lwm=0, css=0;
js->stats(&total, &lwm, &css);

对象属性

JsValue obj = js->makeObject();
js->set(obj, "answer", JsEngine::makeNumber(42));
js->set(js->glob(), "cfg", obj);
运行时绑定可选模块(consoleMath 等)请参阅 扩展模块