搜索

首页  >  问答  >  正文

javascript - 在函数外声明对象,然后在函数内赋值,结果在函数外无法获取到所赋的值


就像图中所示,展开时可以看到值,但是值其实不在对象中

if (typeof require !== 'undefined') var XLSX = require('xlsx');

function to_json(workbook) {
    var result = {};
    workbook.SheetNames.forEach(function(sheetName) {
        var roa = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
        if (roa.length > 0) {
            result[sheetName] = roa;
        }
    });
    return result;
}
export function handleFile(e) {
    var files = e.target.files;
    var i, f;
    var testTest = {};
    for (i = 0; i != files.length; ++i) {
        f = files[i];
        var reader = new FileReader();
        var name = f.name;
        reader.onload = function(e) {
            var data = e.target.result;
            var workbook;
            /* if binary string, read with type 'binary' */
            workbook = XLSX.read(data, {
                type: 'binary'
            });
            let excelData = to_json(workbook);
            testTest.data = excelData;
        };
        reader.readAsBinaryString(f);
    }
    console.log(testTest)
    return testTest

}
迷茫迷茫2792 天前411

全部回复(2)我来回复

  • 仅有的幸福

    仅有的幸福2017-05-19 10:21:52

    chrome的console打印对象的时候,查看值是点击展开时再详细获取的,整个流程:

    1. 空对象声明

    2. 执行console,chrome打印对象,传递的是对象的引用

    3. FileReader完成,赋值data给对象

    4. 你在console中,点击展开值,通过对象引用,获取到对象的详细值

    你可以看到截图Object {} [i]这里有个[i]的图标,有对应的对象console说明:

    value below was evaluated just now

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-19 10:21:52

    问题在于,你的reader.onload是在啥时候运行的。


    另外,我还是搞不明白,为什么不直接复制粘贴代码???为什么要截图?

    回复
    0
  • 取消回复