ffi闭包函数和js函数的isJSFunction如何理解?
function test(){
console.clear()
/**函数类型是指由C语言函数指针封装成的js函数。**/
let funType = ffi.Function({
abi:"",
returnType:"int32",
parameters:["int32"]
})
/**函数与闭包的JS封装类型统一,都是FunctionValue,但值的字段类型有区别。用isJSFunction字段区分函数和闭包。**/
let fun = funType.createJsFunction((v) => 2*v)
console.log('c语言指针封装出的函数fun(3)的运行结果:' + fun(3))
console.log('是否js函数:' + fun.isJSFunction)
/**函数不能作为实参,推荐使用其指针作为实参。可以通过ToPointer()函数显式获取函数指针。**/
console.log('js函数内部指针地址为:0x' + fun.inner.ToPointer().ToBigInt().toString(16))
/**js函数传递给闭包函数时,会自动从内部取出指针**/
let closureType = ffi.Function({
abi:"",
returnType:"int32",
parameters:["pointer","int32"]
})
let closureFun = closureType.createJsFunction((fun,v) => fun(v))
console.log('闭包函数closureFun(fun,3)的运行结果:' + closureFun(fun,3))
console.log('闭包函数是否js函数:'+ closureFun.isJSFunction)
/**此处极为困惑,这里应该是创建了一个闭包函数,js函数也被提出为指针,可是检测出来的还是js函数**/
console.log('闭包函数内部指针地址为:0x' + closureFun.inner.ToPointer().ToBigInt().toString(16))
}
/**c语言指针封装出的函数fun(3)的运行结果:6
是否js函数:true
js函数内部指针地址为:0xb690010
true
闭包函数closureFun(fun,3)的运行结果:6
闭包函数是否js函数:true
闭包函数内部指针地址为:0xb690050
api抽空看了一半,看不懂,先记录下来
**/
@金山办公