nodejs/node-addon-examples

[Question] Why are the return values ​​of the two functions different?

sdg9670 opened this issue · 1 comments

Napi::Object MyObject::NewInstance(Napi::Env env, Napi::Value arg) {
Napi::EscapableHandleScope scope(env);
Napi::Object obj = env.GetInstanceData<Napi::FunctionReference>()->New({arg});
return scope.Escape(napi_value(obj)).ToObject();
}

Napi::Value MyObject::Multiply(const Napi::CallbackInfo& info) {
Napi::Number multiple;
if (info.Length() <= 0 || !info[0].IsNumber()) {
multiple = Napi::Number::New(info.Env(), 1);
} else {
multiple = info[0].As<Napi::Number>();
}
Napi::Object obj = info.Env().GetInstanceData<Napi::FunctionReference>()->New(
{Napi::Number::New(info.Env(), this->value_ * multiple.DoubleValue())});
return obj;
}

I'm Newby, who just got into NAPI.
In the above two codes, methods are create and return the object.
I wonder why only the return value in NewInstance uses escape scope.

The different is that in the first case the creation of the object was done in the context of a scope

Napi::EscapableHandleScope scope(env);

You can read more about scopes in -> https://github.com/nodejs/node-addon-api/blob/main/doc/handle_scope.md#handlescope