将附加参数传递给回调函数

时间:2016-03-01 18:20:34

标签: javascript

我有一个非常简单的函数,即使用HTML 5 FileReader读取文件:

var reader = new FileReader();
var currentFileType = file.type;
reader.onloadend = readCompleted;
reader.onerror = fail;

reader.readAsArrayBuffer(file);

并且readCompleted回调函数如下所示:

    function readCompleted(evt) {
        if (evt.target.readyState != FileReader.DONE) {
            return;
        }

        // The binary data is the result.
        var requestData = evt.target.result;

        // SOME MORE CODE HERE
    }

事情是' evt'默认情况下传递参数。为了使currentFileType变量可用,我如何将一个附加参数传递给此回调函数?我希望这个函数签名看起来像这样:function readCompleted(evt, fileType) {//code here}并以某种方式将currentFileType传递给它。

3 个答案:

答案 0 :(得分:2)

您可以使用Function.bind将参数绑定到函数,然后再将其分配给onloadend

例如:

var a = function() { console.log(arguments); }
var b = a.bind(null, 123)
b('abc') // -> [123, "abc"]

在你的情况下,它将是:

reader.onloadend = readCompleted.bind(null, file.type);

readCompleted应具有以下签名:

function readCompleted(fileType, evt) { ... }

答案 1 :(得分:1)

只需为reader.onloadend分配不同的功能。

reader.onloadend = function(evt) {
    readCompleted(evt, currentFileType);
};

答案 2 :(得分:0)

你可以这样写,

tab <- aggregate(theData, list(theData$surname), length)
tab$size_check <- tab$surname == tab$FamilySize
tab
##   Group.1 surname FamilySize size_check
## 1   Allen       1          1       TRUE
## 2  McGraw       1          1       TRUE
## 3  Parker       2          2       TRUE
## 4   Smith       3          3       TRUE

readCompleted将如下所示,

studentBindingSource.EndEdit();
**studentTableAdapter.UpdateStudentData(this.k5smsData.Student);**
panel1.Enabled = false;