面试题相关2
1函数柯里化
函数柯里化就是我们给一个函数传入一部分参数,此时就会返回一个函数来接受剩余的参数
function sum(a){
return function(b){
return function (c){
return a+b+c
}
}
}
console.log(sum(1)(2)(3))
2.Js基础数据类型
Null 数值 布尔 字符串 undefined Symbol
3.判断数据类型方法
(1)通过constructor可以直接找到元素的构造函数类型,这种方法能够区分引用数据类型到底是那种类型,(null 和 undefined 没有constructor)
(2)instanceof来判断引用类型到底属于哪种类型
(3)使用typeof来判断基本数据类型
(4)Object.prototype.toString.call()精确确定类型(强烈推荐)
4深拷贝
创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”
5.Flex布局
6.z-index
7.Http1.1 长连接 connection:keep-alive
8.事件捕获的三个阶段(事件冒泡 事件捕获 事件委托)
一个事件的处理过程主要有三个阶段:捕获,目标,冒泡
阻止事件委托和冒泡:在事件函数中执行event.stopPropagation()
9内存泄露:闭包 定时器
10.This.$set()
当我们发现给对象加了一个属性,在控制台能打印出来,但却没有更新到视图上,也许这个时候就需要用到
官方解释:向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新,他必须用于响应式对象上添加新属性,因为Vue无法探测普通的新增属性
11生命周期keep-alive
12.路由跳转
13.HTTP HTTPS区别 七层网络模型哪一层?
14.cookie 本地存储 会话存储
15.Css选择优先级
!important> style >id>class>标签>通配符
16.虚拟DOM
虚拟dom想当于在js和真实dom中间加了一个缓存,利用dom diff算法避免了没必要的dom操作,从而提高性能
17.export 和export default的区别
export暴露是接口,可以在变量前使用
export default 暴露的是变量,指定了默认输出,因此一个模块只能存在已一个,导入时可以不用加{},而export可以存在多个,这个是俩的区别之一
18.三次握手的过程
19.N的阶乘
function factor(num){
var result = 1;
while(num){
result *= num;
num --;
}
return result;
}
20.
""==[]
console.log(["123"]==["123"])//两个引用数据类型 地址不同
21.new过程
let a = new Foo(‘小明’,age:20)
(1)创建一个对象
var obj ={};
(2)原型赋值,将隐式原型__proto__属性赋值给prototype显示原型
obj.__proto__ =Foo.prototype;
(3)函数执行Foo,通过call()将this指向obj对象吗,给obj添加属性
Foo.call(obj,’小明’,20)
(4)返回obj对象
return obj
22.Set Map
set
const s = new Set();
[2,3,4,5,2,2].forEach(x=>s.add(x))
for(let i of s){
console.log(i)//2 3 4 5
// 通过add()方法向Set结构加入成员,结果表明不会添加重复的值
// Set函数可以接受一个数组(或者具有iterable接口的其他数组结构)作为参数,用来初始化
}
const items = new Set([1,2,3,4,5,5,5,5]);
console.log(items.size)
console.log(items.has(1))
console.log(items.clear())
console.log(items)
// size属性是集合的大小 Set原型上身上的方法,
// add(value)添加值, 返回set本身
// delete(value) 删除值,返回布尔值
// has()判断是否有值,返回布尔值
// clear()清空Set,没有返回值
// forEach(value=>{console.log(value)}) 遍历Set
map
// map
// 使用new关键字和map构造函数可以创建一个映射;
const m = new Map();
//如果想在创建的同时初始化实例,可以给Map构造函数传入一个可以迭代的对象,需要包含健/值对数组。
// 可迭代对象的每个健/值对都会按照迭代顺序插入到新映射实例中:
const m1 = new Map([["key1","val1"],["key2","val2"],["key3","val3"]]);
// alert(m1.size)//3
const mm = new Map();
const o = {p:'Hello Word'};
mm.set(o,'content')
mm.set(o,'ccccccc')
console.log(mm.has(o))
console.log(mm.get(o))
console.log(mm)
const map = new Map([
['name','张三'],
['title','Author']
]);
console.log(map.size)
map.set('1','')
console.log(map)
// Map构造函数接受数组作为参数,实际上执行的是下面的算法
const item = [
['name','张三'],
['title','Author']
];
const map1 = new Map();
item.forEach(([key,value])=> map1.set(key,value))
区别:(1)两种方法具有极快的查找速度
(2)Map和set都不允许健重复
(3)初始化需要值不一样,Map需要的是一个二维数组,而set需要的是一维数组Array数组。
(4)Map是键值对的存在,键和值是分开的:Set没有value只有key;value就是Key
重绘和回流
Visibility:hidden opacity()
diff算法
在数据发生变化时,vue是先根据真实DOM生成一颗virtual (虚拟)DOM,当virtual DOM某个节点的数据改变后会生成一个新的Vnode,然后Vnode和oldVnode作对比,发现不一样的地方就直接修改在真实DOM上,然后使oldVnode的值为Vnode,来实现更新节点。
原理阐述:
- 先去同级比较,然后再去比较子节点
- 先去判断一方子有子节点一方没有子节点的情况
- 比较都有子节点的情况
- 递归比较子节点

浙公网安备 33010602011771号