我已经学习了许多文章和帖子来了解File API,但仍然不明白为什么几乎所有文章和帖子都使用event.target
代替reader
。以下是三个例子:
最后一条引用甚至建议使用event.target
:
FileReader实例在事件处理程序via中可用 event.target,建议使用它而不是引用 读者变量直接。
但为什么推荐并广泛使用?使用reader
或更简单的this
会出现什么问题: DEMO
我知道this
和event.target
可能不同,但在这种情况下,它们都引用FileReader
对象。
reader
:FileReader
; onload
:FileReader event; result
:FileReader property; 虽然您可以使用reader.onload
,但为什么不使用reader.result
?
答案 0 :(得分:0)
读者变量可能不在范围内:
(function() {
// variables defined in this IIFE are not visible outside
var reader = new FileReader();
reader.addEventListener("load", processText);
// ...
})();
function processText(event) {
// `event.target` works here
// `reader` will not work
// because the scope of this function does not include `reader`
]
这是一个人为的例子,但问题可能体现在你的回调和读者可变声明在不同的范围内,或者单个函数充当多个读者的事件监听器的任何实际情况中(例如{{1} }})。
至于使用reader1.onload = readText; reader2.onload = readText;
与this
,这似乎纯属个人偏好。