面试题总结

1.事件循环—done
Js的运行机制是单线程的,一次只能做一件事。但是往往会有一些比较耗时的操作,如果等这些耗时的操作执行完,再执行其他的程序就会很慢,所以出现了同步和异步的概念,把不耗时,马上能执行有结果的代码称为同步代码块,把耗时的,或者不能马上给结果的例如异步请求,定时器,promise的then,async await等称为异步代码,这里有两个任务队列,一个是宏任务队列,一个是微任务队列,setInteval,setTimeout,script代码块是宏任务,promise的then等其他的是微任务,代码执行的时候有一个执行环境栈,执行顺序是先执行script代码块,在碰到异步任务的时候,先放到宏任务或者微任务队列里面,等主代码执行一遍之后,在微任务队列里面依次拿微任务,压到执行环境栈里面执行,直到微任务队列的微任务执行完,再在宏任务队列里面拿一个宏任务压到执行环境栈里面执行,在执行的过程中,如果再遇到宏任务或者微任务先放到任务队列里面,然后一个宏,队列当前所有的微,再一个宏,再微,依次往下循环直到所有的代码都执行完毕。

2.受控组件和非受控组件
受控组件指的是受react 状态管理的组件,一般是像input 等的表单组件,给组件绑一个value 和事件,在事件里面把操作的值更新到state上,再反应到表单组件的显示上。
非受控组件指的是通过直接操作dom元素来控制表单的值,大多数情况下我们都通过state的状态机制来管理表单的值,很少的业务场景语言直接操作dom 元素

3.闭包
闭包是js的垃圾回收机制导致的,js代码在执行的时候有一个执行环境栈,在这个栈里面有一个AO活动对象,活动对象里面有一些创建的变量,这些变量由于被其他地方引用暂时得不到释放,形成了闭包,直到引用的方法执行完成,变量才会被垃圾回收。闭包有两个机制,一个是保存一个是保护,保护是保护变量不被函数外界访问到,操作不到。保存是指变量被保存起来能被内层函数访问到。闭包有一些优秀的运用比如说柯里化函数,就是运用闭包的机制先将参数暂存起来,等最终需要用的时候一次性求值。闭包在项目上也有一些应用,比如项目里面很多模块都要用到国际化语言的翻译,对于各模块的组件和翻译文件是各模块自己的,但是使用翻译的逻辑是公共的,提取一个高阶函数把nls文件和组件作为参数传入,返回一个新组件,nls数据作为组件的参数,第一次函数执行的时候nls数据被暂存起来,第二次执行的时候返回一个新组件并且拿到暂存的nls的数据并作为参数传给新组件。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值