码迷,mamicode.com
首页 > 其他好文 > 详细

闭包的常规缺陷以及唯一一种解决方案

时间:2019-11-29 18:29:37      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:解决   test   div   pre   style   document   doc   var   执行   

function test () {
                    var arr = [];
                    for (var i = 0; i < 10; i ++) {
                        arr[i] = function () {
                            document.write(i + " ");
                        }
                    }
                    return arr;
                }


                var myArr = test();
                for (var j = 0; j < 10; j ++) {
                    myArr[j]();
                }

首先看for循环,循环时arr[i]变化为arr[0]-arr[9],但因后面函数并无执行语句执行,所以循环10次结果为:arr[0] = function () {}   ====> arr[9] = function () {},“document.write”语句未执行,属于‘看不见’的状态,只能看到arr数组的每位都是一个function,一共有10个,此时i的值已因循环变成了10。  然后把arr数组return保存到了外部,此后再执行函数,因i的值已为10,执行时终于才读取到document.write语句,所以打印10,执行10次就打印10个10

闭包的常规缺陷以及唯一一种解决方案

标签:解决   test   div   pre   style   document   doc   var   执行   

原文地址:https://www.cnblogs.com/oo5lll/p/11959355.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!