Javascript 为什么FileReader.onload处理程序设置了自执行函数
遵守守则: 自动执行功能背后的原因是什么?我知道img被传递给函数并在返回函数的方法中使用,但为什么他们不这样引用它呢:Javascript 为什么FileReader.onload处理程序设置了自执行函数,javascript,filereader,Javascript,Filereader,遵守守则: 自动执行功能背后的原因是什么?我知道img被传递给函数并在返回函数的方法中使用,但为什么他们不这样引用它呢: reader.onload = function(e) { img.src = e.target.result; }; 循环的中没有特殊的作用域,因此在循环中声明变量将在每次迭代中覆盖变量,因此 for (var i = 0; i < 10; i++) { var img = document.createElement("img"); setTi
reader.onload = function(e) { img.src = e.target.result; };
循环的
中没有特殊的作用域,因此在循环中声明变量将在每次迭代中覆盖变量,因此
for (var i = 0; i < 10; i++) {
var img = document.createElement("img");
setTimeout(function() {
console.log(img);
}, 100);
}
有人决定稍微聪明一点,编写一个IIFE,在每次迭代中用返回函数的IIFE锁定img
的值
换句话说,如果他们只是在没有IIFE的情况下引用它,那么他们将只得到最后一个img
,因为for循环将在每次迭代中完成并覆盖img
变量,并且当循环完成且img
仅保存最后一个值集时,onload函数将在稍后执行
reader.onload = function(e) { img.src = e.target.result; };
for (var i = 0; i < 10; i++) {
var img = document.createElement("img");
setTimeout(function() {
console.log(img);
}, 100);
}
(function(aImg) {
reader.onload = function() {
aImg.src = e.target.result;
}
})(img);