Lambda 函數及其參數的作用域行為
當建立 lambda 函數時,它會繼承其封閉函數的作用域。然而,當使用迭代器循環產生一系列 lambda 函數時,會出現一個常見的誤解。在這種情況下,lambda 函數共享相同的作用域變量,從而導致意外結果。
考慮以下簡化程式碼:
預期輸出為:
然而,實際輸出是:
發生這種情況是因為lambda 函數在建立時保留了對封閉範圍內的共享變數m 的參考。當執行 lambda 函數時,m 已重新指派給“mi”,從而導致意外的輸出。
要解決此問題,可以使用具有預設值的可選參數。這允許每個lambda 函數捕獲自己的變數值:
透過此修改,每個lambda 函數在建立時都會維護m 值的不同副本,從而產生所需的輸出:
以上是如何避免 Lambda 函數會因為共享作用域變數而出現意外行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!