FileReader的onload回调参数oFREvent作用是什么?有无特殊效果?
oFREvent的本质与核心作用
这个参数是FileReader实例触发load事件时,浏览器自动传给回调函数的 ProgressEvent 类型事件对象,oFREvent只是开发者约定俗成的命名缩写,你完全可以把它改成e、event等任意合法变量名,不会影响功能。
它的核心作用有两点:
- 承载本次文件读取操作的全量状态信息:包括读取进度、是否成功、最终读取结果等,你代码中用到的
oFREvent.target.result就是读取完成后生成的DataURL格式图片数据。 - 安全指向触发本次事件的
FileReader实例:oFREvent.target和你之前声明的oFReader变量指向同一个实例,不受外层变量修改、作用域混乱的影响。
和替代方案的差异
你完全可以不使用这个参数,直接通过外层的oFReader变量获取结果,写法如下:
let oFReader = new FileReader(); oFReader.readAsDataURL(document.getElementById("uploadImage").files[0]); oFReader.onload = function () { // 直接用外层的oFReader变量拿结果 document.getElementById("uploadPreview").src = oFReader.result; };
两种写法没有任何功能、性能上的差异,也不存在特殊效果,仅适用场景有区别:
- 如果你是单文件读取的简单场景,两种写法随便选,没有任何区别。
- 如果是多文件批量异步读取、或者后续逻辑可能修改
oFReader变量指向的场景,用事件对象的target属性拿到的实例永远对应触发当前load事件的读取器,不会出现变量指向错误的问题,稳定性更高。
内容的提问来源于stack exchange,提问作者Visbot-2187
相关产品推荐
相关产品推荐

