【前端面试题】异步编程+时间轮询+严格模式+全局函数+object方法+

1、 说明⼀下 setTimeout 、 Promise 、 Async/Await 的区别

首先、都与异步有关
同步进入主线程、异步进入event table注册函数、指定的事情完成时,eventtable会将事情移入event queue、主线程中同步的任务执行完毕会去队列中执行,这就是***事件轮询***
setTimeout属于宏任务,宏任务还包括整体代码、settimeout、setinterval

promise本身属于宏任务、但是then里面属于微任务、

执行settimeout时候,会将里面的函数放入宏任务,执行

    console.log("script start");
    let promise1 = new Promise(function(resolve) {
        console.log("promise1");
        resolve();
        console.log("promise1 end");
    }).then(function(){
        console.log('promise2');
    })
执行promise里面的同步代码块、然后遇到resolve加入微任务,再执行resolve下面的,之后跳出,执行到settime加入宏任务,在执行同步,直到同步执行完,在执行微任务,然后时宏任务
    setTimeout(function () {
        console.log('setTimeout');
    }, 0)
    console.log('script end');

    async function async1(){
        console.log('async1 start');
        await async2();
        console.log('async1 end')
    }
    async function async2(){
        console.log('async2')
    }

    console.log('script start');
    async1();
    console.log('script end')

use strict 的用法***

1、严格模式、使js运行时实施更加严格的解析和错误处理方法

  1. 变量使用之前必须声明,否则会自动创建一个全局变量
  2. 取消this的强制类型转换、没有严格模式引用null或者未定义的this,会强制转换为全局
  3. 不允许重复的属性名
  4. 提高编译效率

js1的全局函数***

  1. eval()计算字符串格式的表达式的值。或者处理js语句
  2. encodeURI和decodeURI,编码
  3. escape对字符串编码,无法解析的特殊字符
  4. isFinite()是数字返回true,不是返回false
  5. isNAN()是不是非数字
  6. Number()i
  7. parseInt(‘字符串’,进制i)
  8. parseFloat()
  9. string

this的用法***

  1. 一般函数,this指向全局对象
  2. 箭头函数,this指向上下文的对象
  3. 如果这个函数是一个对象的内置的方法,里面的this就指向调用的对象
  4. 如果作为构造函数,指向new出来的对象
  5. apply或者call会,this会指向传入的对象

object对象的常用方法***

  1. object.keys()返回自身的属性
  2. valueOF()返回值
  3. toString()返回字符串
  4. hasownProperty()自身的,非继承
  5. defineproperty(对象,键值对,枚举/修改)
  6. preventExtension()不可添加新属性
  7. seal()无法添加,无法删除
  8. freeze()不可操作
  9. isfrozen()是否

私有属性怎么实现***

  1. 闭包形式:

防止用户疯狂点击提交按钮***

  1. 在事件绑定函数里面添加一个开关属性,初始值为true,点击一次设置为false,然后设置一个定时器,过一段事件设置为true
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

超时处理**

1、步骤解析:
第一步:将网络请求事件赋值给变量ajaxTimeOut
第二步:通过设置timeout属性值,来定义超时时间
第三步:通过complete中的status是否等于timeout来判断是否超时,并设置超时提示处理

2、具体代码
let ajaxTimeOut = $.ajax({ //将网络请求事件赋值给变量ajaxTimeOut
url: “/api_v1.1/apiPackage/knowKeyWord”,
type: “GET”,
dataType: “json”,
data: {
“knowcontent”: this.state.title + this.state.description,
},
timeout: 2000, //通过timeout属性,设置超时时间,这里指的是毫秒
success: function (data) {
console.log(“获取关键字成功”);
console.log(data);
}.bind(this),
error: function (xhr, status, err) {
}.bind(this),
complete: function (XMLHttpRequest, status) { //当请求完成时调用函数
if (status == ‘timeout’) {//status == 'timeout’意为超时,status的可能取值:success,notmodified,nocontent,error,timeout,abort,parsererror
ajaxTimeOut.abort(); //取消请求
Modal.warning({ //超时提示:网络不稳定
title: ‘友情提示’,
content: ‘网络不稳定’,
});
}
}
});

base64编码和utf-8编码**

  • 传输8bit字节编码,表示二进制数据,将二进制数据编码之后放在url传输,

  • 使用数字字母+/

  • 字符串的长度是4的整数倍

  • 使用window.btoa或者window.atob实现ascii和base64转换,

  • utf-8,节省资源,变长编码,从一个字节到6个字节,

在这里插入图片描述
// utf8 转为 base64/hex
let output = Buffer.from(‘utf8的字符串’, ‘utf8’)
console.log(output.toString(‘base64’))
console.log(output.toString(‘hex’))

utf-8英文一个,非英文3个,是unicode的进化版本

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值