JS(含ES6)
1. 第一个宏任务中含有多个微任务,第二个宏任务也这样,问执行顺序
先执行宏任务 微任务会在第一个宏任务执行完之后再执行,之后是第二个宏任务
2. let、var、const的区别
var 可以重复声明一个变量,let不行
var挂在再windows下
const 声明了必须赋值 定义不可变的量,改变了就会报错
3.const既然不可变,那他内部的属性如果改变了呢
const p = {
name:"123"
}
p.name = "1" // 这时属性可变
p = {
name:"1"
} // 这时指针改变了 会报错
4.什么是闭包?手写一个闭包
可以访问外部函数的的内部函数
function fun1(){
var a = "外部变量"
function fun2(){
console.log(a)
}
return fun2
}
5.call跟apply以及bind的区别
call 跟 apply 的区别在于 前者接受若干参数 后者 一个参数包含若干参数,这两者都会立即调用
bind会先新创建一个函数,然后想调用的时候在执行
三者都是改变this指向
6.set跟map用过吗,说一下作用
二者都是ES6语法
set 创建一个不重复的数组
map 转化为对象保存键值对
7.现在有个数组[1,2,3,3] 用set去重保留数组格式
var arr = new Set([1,2,3,3]) // 去重
var arr2 = Array.from(arr) // 设置为数组格式
8.for of 用过吗,可以用来循环什么
可迭代对象都可以使用
数组:
const arr = [1,2,3]
for (const value of arr){
console.log(value)
}
// output
// 1
// 2
// 3
Map映射
const iterable = new Map([['one', 1], ['two', 2]]);
for (const [key,value] of iterable ) {
console.log(`Key: ${key} and Value: ${value}`);
}
// Key: one and Value: 1
// Key: two and Value: 2
字符串就是一个个打印出来就不写了
9.ES6中的解构 const [a,...arr,b] = [1,2,3,4] 输出什么
坑,会报错
vue
1.vue模板里的data为什么是属性不是方法
开始挖坑,其实vue里的data就是方法(这个社会简直险恶)
至于为什么是方法不是属性,组件指向都是data,如果是属性data修改所有组件都会修改(被共享了),所以必须是方法,每复用一次都会产生新的实例,
给组件创造私有的数据空间
2.vue里的虚拟dom跟双向绑定
虚拟dom:dom操作太多非常耗性能太耗费,render把template模板转化为虚拟dom.vue会在虚拟的节点模拟操作完 然后以最优的方式更新实际dom,优化了性能
数据双向绑定:Component组件 在渲染时候会根据他们依赖的data去触发set这就是读,vue会收集依赖,而data数据变动会触动getter,监听回调render函数进行重新渲染,这时候他们已经组件发生了变化,然后虚拟dom会去调用diff算法,找到本次DOM更新的节点,其他不改动的地方会原地还原,减少页面重绘最终更新成真实dom