js问题(杂)

Posted stray

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js问题(杂)相关的知识,希望对你有一定的参考价值。

1、new后做了什么?

  • 创建一个新对象
  • 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象)
  • 执行构造函数中的代码(为这个新对象添加属性)
  • 返回新对象

2、什么是 包装对象
所谓“包装对象”,指的是与数值、字符串、布尔值分别相对应的NumberStringBoolean三个原生对象。这三个原生对象可以把原始类型的值变成(包装成)对象。
某些场合,原始类型的值会自动当作包装对象调用,即调用包装对象的属性和方法。这时,javascript 引擎会自动将原始类型的值转为包装对象实例,并在使用后立刻销毁实例。

3、宏任务和微任务

console.log(\'start\')

setTimeout(() => {
  console.log(\'setTimeout\')
}, 0)

new Promise((resolve) => {
  console.log(\'promise\')
  resolve()
})
  .then(() => {
    console.log(\'then1\')
  })
  .then(() => {
    console.log(\'then2\')
  })

console.log(\'end\')

输出

start 
promise
end
then1
then2
setTimeout

Event Loop中,每一次循环称为tick,每一次tick的任务如下:

  • 执行栈选择最先进入队列的宏任务(一般都是script),执行其同步代码直至结束;
  • 检查是否存在微任务,有则会执行至微任务队列为空;
  • 如果宿主为浏览器,可能会渲染页面;
  • 开始下一轮tick,执行宏任务中的异步代码(setTimeout等回调)。

ES6 规范中,microtask 称为 jobs,macrotask 称为 task
宏任务是由宿主发起的,而微任务由JavaScript自身发起。
在ES3以及以前的版本中,JavaScript本身没有发起异步请求的能力,也就没有微任务的存在。在ES5之后,JavaScript引入了Promise,这样,不需要浏览器,JavaScript引擎自身也能够发起异步任务了。
参考文章:https://www.jianshu.com/p/bfc...

4、vue中v-if和v-show的区别
(1)手段:

v-if 是动态的向DOM树内添加或者删除DOM元素;
v-show 是通过设置DOM元素的display样式属性控制显隐;

(2)编译过程:

v-if 切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;
v-show只是简单的基于css切换;

(3)编译条件:

v-if 是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译(编译被缓存?编译被缓存后,然后再切换的时候进行局部卸载);
v-show 是在任何条件下(首次条件是否为真)都被编译,然后被缓存,而且DOM元素保留;

(4)性能消耗:

v-if 有更高的切换消耗;
v-show 有更高的初始渲染消耗;

(5)使用场景:

v-if 适合运营条件不大可能改变;
v-show 适合频繁切换。

5、什么是回调、回调使用存在什么问题?

6、Promise.allSettled是什么

一、React组件间通信方式
父组件向子组件通信: props
子组件向父组件通信: 回调函数/自定义事件
跨级组件通信: 层层组件传递props/context
没有嵌套关系组件之间的通信: 自定义事件

二、React实现路由懒加载
import()、require.ensure、lazyload-loader

三、React生命周期
组件将要挂载时触发的函数:componentWillMount
组件挂载完成时触发的函数:componentDidMount
是否要更新数据时触发的函数:shouldComponentUpdate
将要更新数据时触发的函数:componentWillUpdate
数据更新完成时触发的函数:componentDidUpdate
组件将要销毁时触发的函数:componentWillUnmount
父组件中改变了props传值时触发的函数:componentWillReceiveProps

四、vue生命周期钩子函数
生命周期函数可以分为创建阶段和运行期间以及销毁期间。其中创建期间的函数有beforeCreate、created、beforeMount、mounted;运行期间的函数有beforeUpdate、updated;销毁期间有beforeDestroy、destroyed

五、vue中computed和watch的区别
1.计算属性变量在computed中定义,属性监听在data中定义。

2.计算属性是声明式的描述一个值依赖了其他值,依赖的值改变后重新计算结果更新DOM。属性监听的是定义的变量,当定义的值发生变化时,执行相对应的函数。

以上是关于js问题(杂)的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

Node.js JavaScript 片段中的跳过代码

js代码片段: utils/lcoalStorage/cookie

JS代码片段:一个日期离现在多久了

js常用代码片段(更新中)