Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么FileReader.onload处理程序设置了自执行函数_Javascript_Filereader - Fatal编程技术网

Javascript 为什么FileReader.onload处理程序设置了自执行函数

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

遵守守则:

自动执行功能背后的原因是什么?我知道img被传递给函数并在返回函数的方法中使用,但为什么他们不这样引用它呢:

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);