如何在javascript中将变量传递给回调函数

时间:2014-01-29 12:36:31

标签: javascript closures scope

我有以下代码,我不太清楚如何将它一直传递给onload函数。

我试图在不同的地方定义它但没有成功,特别是因为它的定义需要在传递给document.on方法的函数中发生,因为我希望得到this的保留参考

$(document).ready(function(e) {
    $(document).on('click', "#someId", function(e) {
        e.preventDefault();
        var variable = $(this).attr('name');

        chrome.fileSystem.chooseEntry({
            type: 'openFile', accepts:[{
                extensions: ['txt']
            }] 
        }, 
        function(fileEntry) {
            if (!fileEntry) {
                return;
            }
            fileEntry.file(function(file) {
                var reader = new FileReader();
                reader.onload = function(e) {
                    ////******* how to access variable here? *******\\\\
                    chrome.storage.local.set({'txt': e.target.result});
                };
                reader.readAsArrayBuffer(file);
            });
        });
    });
});

我需要访问variable函数中的onload。 我怎么能通过呢?

2 个答案:

答案 0 :(得分:0)

您可以利用closures执行此操作:

onload = function () {
    var variable;
    $(document).on('click', "#someId", function(e) {
        variable = $(this).attr('name');
        // use variable here
    });
    // and here
};

答案 1 :(得分:0)

如果我正确解析您的代码,那么您应该能够在您想要的地方使用变量。它的范围正确,并且有一个闭合装置可以保持活动状态。

将其设为全局,就像之前的回答一样,会产生同时调用的问题 - 下一次调用可能会覆盖变量值,并且在.onload中获取它时会得到不同的值。