簡體   English   中英

JavaScript“函數工廠”似乎不起作用

[英]“Function factory” doesn't seem to work, JavaScript

我正在循環顯示一系列圖像,並且嘗試實現某種裸體過濾器,因此我使用的是nude.js ,這是一個可以檢測裸體的庫。 這是代碼:

// we're inside a loop
$(".images").prepend($("<img>").attr({src: whatever, id: uniqueid}).load(function(e) {
    nude.load(e.target.id);
    nude.scan(function(result) { if (!result) $(e.target).detach(); });
});

但是,它分離所有錯誤的圖像,因為nude.js速度很慢,並且在循環進行到以后的迭代之后完成,從而分離了這些圖像,而不是其正在處理的圖像。

我試過使用函數工廠:

function generateCallback(arg) {
    return function(result) { if (!result) $(arg).detach(); };
}

nude.scan( generateCallback(e.target) )

但同樣的事情發生了。

我想要的是一個load事件,如果它似乎包含裸露內容,它將刪除該圖像。 如何正確執行此操作?

編輯:nude.js是這樣的:

nude.load(imageid);
nude.scan(callback); // it'll pass true or false into the callback

另一個編輯:意外地從我發布的代碼中省略了id設置,但是它在我的真實代碼中,所以我在這里添加了它。

我懷疑這里的情況是,這種順序處理不適用於nude.js。

看一下nude.js 代碼 ,我認為您的問題出在對nude.scan的調用中。 nude.js有一個變量,用於存儲掃描完成后要調用的函數。 調用nude.scan(callback) ,此變量設置為callback

從您的PasteBin中 ,似乎在第一個調用中按預期分配了回調,但是在第二個及后續調用中,它被替換了,因此為什么要分離第二個而不是第一個圖像。

您的腳本發生的事情是e var對函數而言是全局的,因此在每次循環后都將其替換為新循環。 因此,當掃描第一個圖像時, e已經成為第二個圖像的事件,該事件被分離。

要解決您的問題,請使用閉包。 如果您想進一步了解閉包,請在這里查看 否則,這是您的問題的解決方案:

$(".images").prepend($("<img>").attr({src: whatever, id: uniqueid}).load(function(e) {
    (function(e) {
        nude.load(e.target.id);
        nude.scan(function(result) { if (!result) $(e.target).detach(); });
    }) (e);
});

編輯:正如nick_w所說,有一個包含回調的var,每次都可能被替換,因此這就是為什么分離正確圖片的原因。 您可能必須自己修改腳本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM