国产成人a∨激情视频厨房,国产v亚洲v欧美v精品综合,heyzo高无码国产精品,国产av导航大全精品,成品人视频ww入口

JS怎么在事件綁定的閉包內(nèi)控制外部函數(shù)的返回值??

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í)行不同的指令。


張智程20071227 59分鐘前

這也是你問題的原因所在。


123457021 58分鐘前

本人不才,目前所知道的是使用對象的復(fù)制來解決。好像有兩個吧,記不清了。Object.assign({}, obj)Object.create(obj)。create是繼承形式。assign是拷貝形式。但該方案似乎對你的問題也不會有太大幫助。


我是石二 56分鐘前

所以當(dāng)你試圖在函數(shù)中傳遞對象參數(shù)。傳遞的就是引用值,你在該引用上的修改直接映射到堆中數(shù)據(jù)。在函數(shù)中返回一個引用值時,事實上該值仍然指向的原始的數(shù)據(jù)。


紗塵幔桃生坐看云海把昨日還給我 55分鐘前

引用類型也就是我們常說的對象。它的值是一個指針地址。指向了堆中的實際對象。


啥東西呢 40分鐘前

所以,最終還是建議你根本就不需要返回一個新對象?。。。?!不用那么麻煩阿。


360U3177463572 35分鐘前

你這個canvas是全局的,可以直接用,返回干啥


編輯 舉報 2023-05-05 14:36

0個評論

暫無評論...
驗證碼 換一張
相關(guān)內(nèi)容