函式 A() 接收 WebView 傳值,函式 B() 需使用該值,兩者在同一頁面。
const DataBus = (() => {
let currentValue = null;
return {
setValue(val) { currentValue = val; },
getValue() { return currentValue; },
clear() { currentValue = null; }
};
})();
function A(valFromWeb) {
DataBus.setValue(valFromWeb);
// 觸發後續流程
B();
}
function B() {
const val = DataBus.getValue();
if (val !== null) {
console.log('B 取得:', val);
// 業務邏輯
}
}
currentValue 不洩漏到 window。var sharedValue = null; // 掛在 window.sharedValue
function A(val) { sharedValue = val; }
function B() { console.log(sharedValue); }
// A 發送
function A(val) {
window.dispatchEvent(new CustomEvent('dataReady', { detail: val }));
}
// B 監聽
window.addEventListener('dataReady', (e) => {
const val = e.detail;
B(val);
});
function B(val) { console.log('B 收到:', val); }
function A(val) { B(val); }
function B(val) { /* 使用 val */ }
| 場景 | 推薦方案 |
|---|---|
| 簡單固定呼叫鏈 | 方案四:直接傳參 |
| 多處需讀寫共享狀態 | 方案一:模組模式 |
| 動態增減監聽者、跨元件通訊 | 方案三:CustomEvent |
| 快速驗證原型 | 方案二:全域變數(事後重構) |
「同頁面函式傳值」本質是狀態共享。優先用模組模式封裝狀態,複雜場景升級為事件總線,避免裸全域變數造成維護噩夢。