zoukankan      html  css  js  c++  java
  • Web前端笔试整理7

    前端 笔试 选牛客网 美团

    this指针和任务队列

    var name = 'global';
    var obj = {
        name: 'local',
        foo: function(){
            this.name = 'foo';
        }.bind(window)
    };
    var bar = new obj.foo();
    setTimeout(function() {
        console.log(window.name);
    }, 0);
    console.log(bar.name);
      
    var bar3 = bar2 = bar;
    bar2.name = 'foo2';
    console.log(bar3.name)
    

    'foo'
    'foo2'
    'global'

    由于new绑定的优先级大于bind绑定, 所以内部this还是实例本身
    定时器任务在异步队列中, 只有在同步队列执行完毕后才从异步队列中按时间顺序执行任务, 同时计时器都有一个默认最小的执行时间 谷歌:5~6ms IE10~13ms

    宏任务微任务

    setTimeout(() => console.log('a'));
    Promise.resolve().then(
       () => console.log('b’);
     ).then(
       () => Promise.resolve('c').then(
         (data) => {
           setTimeout(() => console.log('d'));
           console.log('f');
           return data;
         }
       )
     ).then(data => console.log(data));
    

    b
    f
    c
    a
    d

    定时器任务属于宏任务, 并且需要先在任务队列等待, 执行栈清空, 才会在任务队列中按顺序选任务进去

    promise属于异步微任务, 在本轮同步任务结束之前执行
    箭头函数的resolve传递的参数作为下一个then的参数

    解析:

    // 定时器任务属于宏任务,并且需要先在任务队列等待,等到同步任务执行完,执行栈清空,才会在任务队列中按顺序选任务进去
    setTimeout(() => console.log('a'));//4. 打印a
     
    //Promise 属于异步微任务,在本轮同步任务结束之前执行
    Promise.resolve().then(
        // 1. 打印 b
       () => console.log('b')  // 单引号要改为',然后去掉;号
     ).then(
        // 箭头函数的resolve传递的参数作为下一个then的参数
       () => Promise.resolve('c').then(
         // 执行箭头函数
         (data) => {
            // 把定时器任务也放入任务队列中等待,在第一个定时器之后
           setTimeout(() => console.log('d')); //5. 打印d
           // 2.打印 f
           console.log('f');
           // 此时返回的 数据作为下一个then的参数
           return data;
         }
       )
     ).then(data => console.log(data)); // 3.打印 c

    请写出下面ES6代码编译后所生产的ES5代码

    class Person {
         constructor (name) {
              this.name = name;
         }
         greet () {
              console.log(`Hi, my name is ${this.name}`);
         }
         greetDelay (time) {
              setTimeout(() => {
                   console.log(`Hi, my name is ${this.name}`);
              }, time);
         }
    }
    
    var Person = (function () {
          function Person(name) {
            this._name = name;
          }
          Person.prototype.greet = function () {
            console.log("Hi, my name is" + this._name);
          };
          Person.prototype.greetDelay = function (time) {
            var _this = this;
            setTimeout(function () {
              console.log("Hi, my name is " + _this._name);
            }, time);
          };
          return Person;
        })();
    

    使用局部变量保存this, 避免定时器中的this指向window

  • 相关阅读:
    在测试自定义starter时,若出现无法找到helloservice的Bean的解决方法
    springboot项目启动后tomcat服务器自动关闭 解决方法
    spring-ioc注解-理解2 零配置文件
    spring-ioc的注解 理解-1
    spring-ioc心得
    springboot的自动配置
    容器关系
    编写程序要做到结构、层次清晰明朗
    maven依赖的jar下载(在指定的仓库中)
    思考:开发的环境问题是一个大问题,也是首先要解决的问题,然后才能顺畅进入开发工作?
  • 原文地址:https://www.cnblogs.com/xiaoxu-xmy/p/13666792.html
Copyright © 2011-2022 走看看