javascript - 在函數外聲明對象,然後在函數內賦值,結果在函數外無法取得到所賦的值
迷茫
迷茫 2017-05-19 10:19:52
0
2
364


就像圖中所示,展開時可以看到值,但是值其實不在物件中

#
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

}
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(2)
仅有的幸福

chrome的console列印物件的時候,查看值是點擊展開時再詳細取得的,整個流程:

  1. 空物件聲明

  2. 執行console,chrome印刷對象,傳遞的是對象的引用

  3. FileReader完成,賦值data給物件

  4. 你在console中,點選展開值,透過物件引用,取得到物件的詳細值

你可以看到截圖Object {} [i]这里有个[i]的圖標,有對應的物件console說明:

value below was evaluated just now

伊谢尔伦

問題在於,你的reader.onload是在啥時候運行的。


另外,我還是搞不明白,為什麼不直接複製貼上程式碼? ? ?為什麼要截圖?

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板