• 关于闭包问题二


    我在整理闭包问题的时候,看到一道前端面试题
    for (var i = 0; i < 10; i++) { setTimeout(function() { console.log(i); }, 0); }
    了解 js 的异步机制的都知道,输出结果是: 10 10 10 ... 10
    然后面试官又问 如果希望得到的是0 1 2 ... 9,如何能够解决这个问题

    我脑海想到的第一个解决方法就是用let代替var使for形成块级作用域;

    第二个解决方法,使setTimeout函数立即执行,形成同步输出:
    for (var i=0; i < 10; i++) {
      (function (temp) {
        setTimeout(function() {
          console.log(temp);
        }, 0);
      })(i);
    }

    如果有其他解决方法,亲爱的朋友们可以评论补充

    再补充一道闭包问题:
    function fun(n,o){
      console.log(o);
      return {
        fun:function(m){
          return fun(m,n);
        }
      }
    }
    
    var a=fun(0);
    a.fun(1);
    a.fun(2);
    a.fun(3);
    var b=fun(0).fun(1).fun(2).fun(3);
    var c=fun(0).fun(1);
    c.fun(2);
    c.fun(3);
    这道题可以较深理解闭包机制,解决这道题比较重要的是理解被保护的数据是哪一个,运行的顺序之类的,输出:
    var a=_fun_(0);//undefined
    a.fun(1);//0
    a.fun(2);//0
    a.fun(3);//0
    
    var b=a.fun(0).fun(1).fun(2).fun(3);
    //undefined,0,1,2
    
    var c=fun(0).fun(1);//undefined,0,
    c.fun(2);//1
    c.fun(3); //1
    我在这就不多做解释了,想一下很容易通的


     
  • 相关阅读:
    java.lang.UnsupportedOperationException: Not supported by BasicDataSource
    c# seo 百度sitemap书写
    c# 泛型原理(旧)
    apache 服务器配置常用知识点合集
    sass 基本常识
    c# TryParse
    webpack 配置热更新
    c# ref和out 详解
    IIS applicationHost.config 查找历史
    c# webapi 自定义返回数据
  • 原文地址:https://www.cnblogs.com/moneyss/p/6970381.html
Copyright © 2020-2023  润新知