1.函數功能:我現在有一個函數,這個函數可以傳遞一個參數進去。這個函數的主要功能是綁定各種事件處理函數,這些綁定的事件處理函數將會對傳遞進去的參數進行處理,并最終將處理后的結果通過閉包外的函數返回出去。2.遇到的問題:事件處理函數是一些閉包,我不清楚怎么在閉包內控制外部函數的返回值。3.代碼比如是這樣:var canvas = document.getElementById("#canvas"); // 一個已經存在的canvas元素function test(canvas, src) { // src是一個圖片的url
var context = canvas.getContext("2d"); var img = new Image();
img.src = src;
img.onload= function() {
context.drawImage(img, 0, 0, 100, 100); return canvas; // 預期目標是在這里實現外部函數test返回新的canvas對象
};
}var newCanvas = test(canvas, "abc.png"); //在此處預期取得新的canvas對象供別處使用4.問題補充說明:一、預期是:處理過后的新canvas對象作為test函數的返回值,但是如果在閉包外寫return,返回的值將會是未經處理的canvas,所以我覺得應該在img.onload對應的閉包內將新的canvas傳遞出去返回,但是不知道怎么實現;二:必須要作為返回值傳出,因為我還有別的函數依賴于這個新的canvas傳遞過去才能執行,所以需要取得返回值以后才能執行。三:可能我的示例代碼不夠清楚,其實這里var newCanvas = test(canvas, "abc.png");我原來代碼中newCanvas是一個已經建立的訪問器變量,在給它賦值的時候會調用訪問器里的setter,這樣就可以讓img加載完以后立刻執行想執行的指令。類似于監聽數據變化,根據數據變化執行指令一樣。而且只要給不同的訪問器變量賦值,就可以執行不同的指令。
JS怎么在事件綁定的閉包內控制外部函數的返回值?
富國滬深
2018-09-10 13:23:23