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