我目前正在編寫一個API來將文件解壓縮到Web瀏覽器沙盒文件系統。我有一個基本的需要傳遞一個參數到一個函數,該函數本身又是一個參數。下面是一些代碼來說明這個問題:功能性編程問題關於傳遞函數參數
//Request a permanent filesystem quota to unzip the catalog.
function requestFilesystem(size){
window.webkitStorageInfo.requestQuota(PERSISTENT, size*1024*1024, function(grantedBytes) {
window.requestFileSystem(PERSISTENT, grantedBytes, function(fs) {
filesystem = fs;
removeRecursively(filesystem.root, unzip(url), onerror);
}, onerror);
}, function(e) {
console.log('Error', e);
});
}
//unzip method can be changed, API remains the same.
//URL of zip file
//callback oncomplete
function unzip(URL) {
importZipToFilesystem(URL, function(){
console.log("Importing Zip - Complete!");
});
}
//remove removeRecursively a folder from the FS
function removeRecursively(entry, onend, onerror) {
var rootReader = entry.createReader();
console.log("Remove Recursive"+entry.fullPath);
rootReader.readEntries(function(entries) {
var i = 0;
function next() {
i++;
removeNextEntry();
}
function removeNextEntry() {
var entry = entries[i];
if (entry) {
if (entry.isDirectory)
removeRecursively(entry, next, onerror);
if (entry.isFile)
entry.remove(next, onerror);
} else
onend();
**Uncaught TypeError: undefined is not a function**
}
removeNextEntry();
}, onerror);
}
如果我嘗試使用
function removeRecursively(entry, onend(URL), onerror) {
有錯誤,AO我的問題是如何圍繞URL值傳遞的解壓縮功能,這解壓縮功能作爲一個回調函數上的removeRecursively
只是傳遞'unzip',不要直接調用它。 'removeRecursively(filesystem.root,unzip,onerror);'not'removeRecursively(filesystem.root,unzip(url),onerror);'。另外,編寫'function removeRecursively(entry,onend(URL),onerror){'完全沒有意義,你怎麼能在param列表中執行? –
@DavidMcMullin事實上,這是一個愚蠢的事情,我誤解了傳遞unzip,我把它作爲一個函數傳遞,函數可以帶參數,所以讓我們把一些參數放在這裏。我不能這麼說,就是爲什麼我問這個問題,這對我來說沒有意義。謝謝回覆! – Astronaut