JSValue has complex definitions(struct) in C, when defining the JSValue in dart,
We are interested in it's type and transformation, like toDart or toJSVal
Each JSValue has it's own value, which is Pointer of C, here we simplifying the process of Pointer converting
We just use JSValue to hold the pointer, until it is released in C
To see if the pointer is released, simply use JSValue.isFreed
In practical, we use JSEngine to create JSValue or receive JSValue instead of using this class directly
Because in JSEngine we have JSContext complete life-time management,
and we don't want to pass JSContext and Pointer of JSValue as parameter everytime.