簡體   English   中英

為什么在使用 Arrow function 時在 Swift 中無法獲得 function 引用

[英]Why I can't get function reference by JSContext in Swift when using Arrow function

我正在嘗試在 Swift 中獲取 JavaScript function 參考並執行它。

最初,我在JS端使用箭頭function ,我的JavaScript function是這樣的。

const invokeCallback = (cbID, args) => {   
    // do some stuff
}

在 Swift 方面,我使用objectForKeyedSubscript中的JSContent來獲取上下文全局 object 中的屬性invokeCallback

    context?.evaluateScript(jsCodeContent)
    let invoke: JSValue? = context?.objectForKeyedSubscript("invokeCallback")
    
    guard let invokeCallback = invoke else { return }
    guard !invokeCallback.isUndefined else { return }
        
    invokeCallback.call(withArguments: [cbId, args])

但我不能原來結果是undefined

Printing description of invoke:
▿ Optional<JSValue>
  - some : undefined

然后,我嘗試使用這種語法來定義function

function invokeCallback(cbID, args) {
}

我現在可以在 Swift 端檢索 function

Printing description of invokeCallback:
function invokeCallback(cbID, args) {
   // ....
}

有人知道為什么第一種情況不起作用,而第二種情況起作用嗎? 請把這些知識分享給我? 謝謝

參考:

問題不在於箭頭 function,而是您聲明 function 的方式。

在全局上下文中使用function 聲明聲明的函數成為全局 object 的一部分。

在全局上下文中用var聲明的變量也成為全局 object 的一部分。 在這種情況下,您是否分配(箭頭)function 表達式或任何其他值都沒有關系。

在全局上下文中用const聲明的變量不會成為全局 object 的一部分

因為您的箭頭 function 被分配給使用const聲明的變量,所以它不是全局 object 的一部分,因此您找不到它。 If you want your function to become part of the global object, you should either use a function declaration, declare your variable with var , or assign it directly to the global object.

globalThis.invokeCallback = () => {...};

還值得注意的是,箭頭函數和常規 function 表達式( 不要與 function 聲明混淆並不總是可以互換的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM