面试题中的闭包

  var arr = [];
    for(var i=0; i<3; i++) {
      arr[i] = function(){
       console.log(i)
     }
   }
//输出 3 3 3
//因为闭包。即使他的上下文已经销毁,但是它仍然存在,依然引用外部变量
//改写1  利用立即执行函数 开辟封闭的变量作用域环境
for(var i=0; i<3; i++) {
    (function(i){
        arr[i] = function(){
            console.log(i)
        }
    })(i)
 //改写1.2 
for(var i=0; i<3; i++) {
  arr[i] = function(i){
  return function() {
   console.log(i)
  }
  }(i)
}
    //  改写2 //利用let行程封闭作用域
  for(let i=0; i<3; i++) {
     arr[i] = function(){
         console.log(i)
     }
   }
  //改写3 //利用了 参数传递  按值传递
  function getNumber(i) {
    return function() {
        console.log(i)
    }
  }
  for(var i=0; i<3; i++) {
    arr[i] = getNumber(i)
  }
 }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我的三星手机已经陪伴我走过了整整三年,虽然手机的周围已经被磨损得掉了漆,我还是很喜欢它。这三年,它的速度越来越慢,...
    黎澈阅读 309评论 0 1
  • 好像现在越来越多的朋友们看待一件事情一个人的时候往往负面 长的漂亮一定整了容 身材好一定抽了脂 漂亮的人同不好看的...
    a4f5c4b480f7阅读 223评论 0 1
  • 辣是痛 麻是频率为五十的 震颤 甜是你的嘴唇 酸是初夏青硬的李子 掉在头上 臭是植物的尸体 在冬天腐烂的 慢而 深...
    孙酷酷阅读 260评论 0 0