前端八股文(js篇 )

目录

 

一.防抖,节流是什么,如何实现?

二.介绍下Set,Map,WeakSet和WeakMap的区别

三.setTimeout,Promise,Async/Await的区别

四.简述同步和异步的区别

五.怎么添加,移除,复制,创建,和查找节点

六.attribute和property的区别是什么?

七.原始类型有哪几种?null是对象吗?

八.什么是函数式编程,应用场景是什么?

九.JavaScript中的数组和函数在内存中是如何存储的?

十.扩展运算符的作用及使用场景


一.防抖,节流是什么,如何实现?

我们在平时开发的时候,会有很多场景频繁触发事件,比如说搜索框实时发请求,onmousemove,resize,onscroll等,有些时候,我们并不能或者不想频繁触发事件,这时候就应该用到函数防抖和节流。

函数防抖,指的是短时间内多次触发同一事件,只执行最后一次,或者只执行最开始的一次,中间的不执行。

具体实现:
 

//函数防抖
function debounce(func,wait){//设置变量,记录setTimeout得到的idlet timerId=null;return function(...args){if(timerId){//如果有值,说明正在等待中,清除它clearTimeout(timerId);}//重新开始计时timerId=setTimeout(()=>{func(..args);},wait);}
}

函数节流,指连续触发事件但是在n秒中只执行一次函数。即2n秒内执行两次。节流如字面意思,会稀释函数的执行频率。

具体实现如下:

//函数节流
function throttle(func,watit){let context,args;let provious=0;return function () {let now = new Date();context=this;args=argumentsif(now-provious>wait){func.app(contxt,args)provious=now;}}}

二.介绍下Set,Map,WeakSet和WeakMap的区别

Set:

  • 成员唯一,无序且不重复
  • 键值与键名是一致的
  • 可以遍历,方法有add,delete,has

WeakSet:

  • 成员都是对象
  • 成员都是弱引用,可以被立即回收机制回收,可以用来保存DOM节点,不容易造成内存泄露
  • 不能遍历,方法有add,delete,has

Map:

  • 本质上是键值对的集合,类似集合
  • 可以遍历,方法很多,可以跟各种数据格式转换

WeakMap:

  • 只能接收对象作为键名,不接受其他类型的值作为键名
  • 键名是弱引用,键值可以是任意的,键名所指的对象可以被垃圾机制回收,此时键名是无效的
  • 不能遍历,方法有get,set,has,delete

三.setTimeout,Promise,Async/Await的区别

事件循环中分为宏任务队列和微任务队列。

其中setTimeout的回调函数放到宏任务队列里,等到执行栈情况以后执行;

promise.then里面的回调函数会放到宏任务的微任务队列里,等宏任务里面的同步代码执行完再执行;

async函数表示函数里面可能会有异步方法,await后面跟一个表达式,async方法执行时,遇到await会立即执行表达式,然后把表达式后面的代码放到微任务队列里,让出执行栈让同步代码先执行。


四.简述同步和异步的区别

同步意味着每一个操作必须等待前一个操作完成后才能执行。

异步意味着操作不需要等待其他操作完成后才开始执行。

在JavaScript中,由于单线程的特性导致所有代码都是同步的。但是,有些异步操作(例如:XMLHtttpRequest或setTimeout)并不是由主线程进行处理的,他们由本机代码所控制,并不属于程序的一部分。但程序中被执行回调部分依旧是同步的。

  • JavaScript中的同步任务是指在主线程上排队执行的任务,只有前一个任务执行完成后才能执行后一个任务;异步任务是指进入任务队列(task queue ) 而非主线程的任务,只有当任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程中进行执行。
  • JavaScript的并发模型是基于"event loop"。
  • 像 alert这样的方法回阻主线程,以致用户关闭他后才能继续进行后面的操作。
  • JavaScript主要用于和用户互动及操作DOM,多线程的情况和异步操作带来的复杂性相比决定了他单线程的特性。
  • Web Worker 虽然允许JavaScript创建多个线程,但子线程完全受到主线程控制,且不能操作DOM。因此他还是保持单线程的特性。

五.怎么添加,移除,复制,创建,和查找节点

1)创建新节点

  • createDocumentFragment()//创建一个DOM片段
  • createElement() //创建一个具体的元素
  • createTextNode() //创建一个文本节点

2)添加,移除,替换,插入

  • appendChild()
  • removeChild()
  • replaceChild()
  • insertBefore()

3) 查找

  • getElementsByTagName()//通过标签名称
  • getElementsByName()//通过元素的Name属性的值
  • getElementById()//通过元素ID,唯一性
  • querySelector()//用于接收一个CSS选择符,返回与该模式匹配的第一个元素
  • querySelectorAll()//用于选择匹配到的所有元素

六.attribute和property的区别是什么?

property和attribute是二个不同的东西,属于不同的范畴。

  • property是DOM中的属性,是JavaScript里的对象。
  • attribute是HTML标签上的特性,它的值只能够是字符串;

简单理解,Attribute就是dom节点自带的属性,例如html中常用的id,class,title,align等

而property是这个DOM元素作为对象,其附加的内容,例如childNodes,firstChild等。


七.原始类型有哪几种?null是对象吗?

在JavaScript中,数据类型整体上来讲可以分为两大类:基本数据类型和引用数据类型

基本数据类型,一个6种:

string,symbol,number,boolean,undefined,null

其中symbol类型是ES6里面新添加的基本数据类型

引用数据类型,就只有一种:

object

基本数据类型的值又被称之为原始值或简单值,而引用数据类型的值又被称之为复杂值或引用值


八.什么是函数式编程,应用场景是什么?

函数式编程和面向对象编程一样,是一种编程式范式。强调执行的过程中而非结果,通过一系列的嵌套的函数调用,完成一个运算过程。它主要有以下几个特点:

  1. 函数时“一等公民”:函数优先,和其他数据类型一样
  2. 只要“表达式”,不用“语句”:通过表达式计算过程得到一个返回值,而不是通过一个语句修改某个状态。
  3. 无副作用:不污染变量,同一个输入永远得到同一个数据。
  4. 不可变性:前面一提到,不修改变量,返回一个新的值。

函数式编程的应用场景:

  • Stateless components:React在0.14之后推出的无状态组件
  • Redux

九.JavaScript中的数组和函数在内存中是如何存储的?

在JavaScript中,数组不是以一段连续的区域存储在内存中,而是一种哈希映射的形式存储在堆内存里面。它可以通过多种数据结构实现,其中一种是链表。

JavaScript中的函数是存储在堆内存中的,具体的步骤如下:

  1. 开辟堆内存(16进制得到内存地址)
  2. 声明当前函数的作用域(函数创建的上下文才是他的作用域,和在那执行的无关)
  3. 把函数的代码以字符串的形式存储在堆内存中(函数再不执行的情况下,只是存储在堆内存中的字符串)
  4. 将函数堆的地址,放到栈中供变量调用(函数名)

十.扩展运算符的作用及使用场景

扩展运算符是三个点(...),主要用于展开数组,将一个数组转为参数序列。

扩展运算符使用场景:

  • 代替数组的apply方法
  • 合并数组
  • 复制数组
  • 把arguments或NodeList转为数组
  • 与解构赋值结合使用
  • 将字符串转为数组

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux定时器错误使用,linux下定时器的使用

Linux下定时器的使用主要用到两个函数:setitimer()和getitimer();注意:setitimer()一个进程中只能有一个,下一个会覆盖前一个的定时。Linux系统给每个进程提供了3个定时器,每个定时器在各自不同的域里面计数,当任何一个…

native.loadlibrary获取路径不对_【Python专题(三)】Python模块导入与路径管理

​前言Python项目的路径管理是一个让人头疼的问题。在写python项目的时候,明明 import了文件A,代码运行时却收到 ModuleNotFoundError,仔细一看,是引用路径不对,很是气人。又或者,当项目中出现了重名的pack…

前沿研究:21世纪工程领域的重大挑战 | 中国工程院院刊

本文选自中国工程院院刊《Engineering》2020年第7期作者:C.D. Mote Jr.来源:Engineering in the 21st Century: The Grand Challenges and the Grand Challenges Scholars Program[J].Engineering,2020,6(7):728-732.编者按近期,中国工程院外…

01-python中字符串的常见操作

(1)find 检测str是否包含在myStr中,如果存在则返回开始的索引值,否则返回-1。 In [1]: myStr "hello world tairan and tairanCity."In [2]: str "tairan"In [3]: myStr.find(str) Out[3]: 12In [7]: str …

centos双系统只有linux,Centos添加Windows/Centos双系统启动

1 在/etc/boot/gurb2/grub.cfg中### END /etc/grub.d/00_header ### 后添加:### BEGIN /etc/grub.d/30os_prober ###menuentry Windows 10(loader)(on /dev/sda1){insmod part_msdosinsmod ntfsset roothd0,msdos1chainloader 1}### END /etc/grub.d/30os_prober #…

linux网站目录在哪_果核建站教程【二】环境安装与搭建第一个网站

有问题加群,一起讨论,一起学习群号:664592923昨天大家都能理解,那么今天我们就要进入实战教程咯。这节教程讲在本地搭建环境和安装程序。1本地环境的搭建之前有教程讲如何在Windows开启Linux系统,本来想直接让大家在Li…

北斗定位2.0版来了!普通人手机可用,全免费!

◎ 科技日报记者 张佳星1.0版解决快的问题,2.0版解决又快又准的问题,是1.0基础上的一个巨大升级!10月14日,在北斗卫星导航系统高峰论坛上,中国信息通信研究院(下简称“信通院”)发布了北斗高精度…

做出明智的决策

无处不在的决策 在我们的一生中,会做出无数的决定或决策,有关于个人生活的,也有工作专业相关的,这发生在我们的每一天中。在这些决策中,有一些无关紧要,有一些却会产生长期影响,乃至导致颠覆性的…

如何看打印机的缓存区域_松下打印机好吗 松下打印机卡纸如何解决【详解】...

现在人们早已习惯了用手机记录下生活中的美好事物,因此拥有一台能打印照片的打印机成为这些人的选择,可随着现在人们对于打印机的需求量在不断的增加,市面上的打印机品牌也随之增多了起来。那么松下 打印机怎么样,松下打印机使用过…

Linux 蓝牙读写,实战Linux Bluetooth编程(三) HCI层编程

作者:Sam (甄峰)(HCI协议简介,HCI 在BlueZ中的实现以及HCI编程接口)1. HCI层协议概述:HCI提供一套统一的方法来访问Bluetooth底层。如图所示:从图上可以看出,Host Controller Interface(HCI) 就是用来沟通Host和Modul…

python xml

xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口…

碰疼了会躲!这个植入“迷你大脑”的AI机器人,可感知疼痛,还能自我愈合...

来源:雷锋网人类为什么会产生痛觉?没错,是因为大脑中枢神经。和触觉、温度等感觉一样,我们对疼痛非常敏感,当受到外界“轻微”刺激时,体内的神经元产生相应的信号,并传输至大脑中的中枢神经系统…

哈佛大学惊人发现:新冠对人类未来影响巨大!

来源:北美观察家近日,哈佛大学公共卫生学院发了一篇Science:根据论文中的描述,无论是否能研发出疫苗,新冠病毒都可能会陪伴人类到2025年。那么,2025年以后人类能摆脱新冠病毒吗?不,只…

服务的分类与启动

一、服务的分类 查询已安装的服务 RPM包安装的服务 [rootbogon ~]# chkconfig --list# 查看服务自启动状态,可以看到所有RPM包安装的服务 # 此命令不可以查看源码包安装的服务 注:1、2、3、4、5、6是运行级别 源码包安装的服务 查看服务安装位置&#xf…

在Linux里awk与sed的区别,linux awk和sed讲解

sed 工具简介在了解了一些正规表示法的基础应用之后,再来呢?呵呵~两个东西可以玩一玩的,那就是 sed 跟 awk 了!这两个家伙可是相当的有用的啊!举例来说,鸟哥写的 logfile.sh 分析登录文件的小程…

python编辑器_推荐一款Python编辑器,集Pycharm和Sublime优点于一身的王者

编程里面的编辑器就像是武林大会里面的高手,每一年都有新秀,黑马出现!比如有练习霸道的天罡之气的榜首Pycharm,力量雄厚霸道战斗力极强,但是对斗气消耗很大,占内存大而且启动速度有点慢!还有练习…

因果解释能够对规则进行解释吗?

来源:《哲学动态》2017年第10期作者:初维峰(西安交通大学人文社会科学学院)本文受中国博士后科学基金面上资助项目“当代西方因果解释理论研究”(2017M613160)资助。在现实生活中,我们不仅要对某一事件进行解释&#x…

抓取一台电脑linux,教程方法;用来获取Linux主机信息的5个常用命令电脑技巧-琪琪词资源网...

琪琪词资源网-教程方法;用来获取Linux主机信息的5个常用命令电脑技巧,以下是给大家带来的教程方法;用来获取Linux主机信息的5个常用命令,大家可以了解一下哦!有些时候Linux 系统管理员在接手一台新的服务器时,如果没有好的交接文档&#xff0…

软件工程网络15个人阅读作业1(201521123029 郑佳明)

软件工程网络15个人阅读作业1 Task1:博客园地址 茗想 Task2:码云地址 ming Task3:完成博客-阅读与思考 阅读参考材料,并回答下面几个问题: (1)回想一下你初入大学时对网络工程专业的畅想 当初你…

okhttp post json 数据_使用python抓取App数据

App中的数据可以用网络爬虫抓取么答案是完全肯定的:凡是可以看到的APP数据都可以抓取。下面我就介绍下自己的学习经验和一些方法吧 本篇适合有过web爬虫基础的程序猿看没有的的话学的可能会吃力一些App接口爬取数据过程使用抓包工具手机使用代理,app所有…