1.js作用域
2. js闭包
闭包可以将变量一直保存在内存中(内部的函数被保存到外部,即b函数保存到了外部,res可以访问到) a函数可以访问b函数的AO,当a函数被销毁的时候,下方的res重新定义了函数,也可以访问a函数中的AO
3. js防抖和结流(考的是js闭包)
3.1 防抖
esc:进度条 点击一次直接执行到100%结束,但是如果在进度条进度在70%没有到100%的时候,点击按钮,此时进度调重新定时器开始计时
防抖函数(模糊搜索功能即输入完毕才访问接口 假设输入2000,输出值是2001,2002,2003这些是在输入200的时候就调用了接口)
<input type='text' id='input'>
function debounce(fun,delay){
let timer;
clearInterval(timer);
//闭包
return function(args){
timer= setTimeout(function(){
fun(args)
},delay)
}
}
function inputFn(value){
console.log('你输入的值${value}')
}
const input= document.getElementById('input')
const debounceInput = debounce(inputFn,1000)
input.addEventListener('keyUp',function(e){
debounceInput(e.target.value)
})
3.2 结流
<button id='button'>点击</button>
function throttle(fun,wait){
let timerOut
return function(){
if(!timerOut){
//缓存 这样写会一直返回是undefind
timerOut = setTimeout(function(){
timerOut = null //即工作做完了告诉他们一声 然后接待新顾客
fun()
},wait)
}
}
}
function handle(){
console.log(Math.random())
}
document.getElementById('button').onclick = throttle(handle,2000)
4.事件流的应用
5.js的深浅拷贝
一般数据类型:number string boolean undefined null symbol(es 6新增)
引用数据类型:object、Array、function
基本数据类型相互独立,引用数据类型互相影响
5.1浅拷贝和赋值的区别
5.1 赋值
person和person1 输出是一样的,都是赋值,都是输出hobby的内容
5.2 浅拷贝
5.3 深拷贝
这个也是深拷贝,和递归深拷贝对比缺点是:
1.输入 正则表达式时 ('\w+')、2.new.Date(1536627600000)、3. function(){}
5.4 总结
6. call apply bind
7. 双向绑定
手写一个发布订阅模式
8. vuex工作原理
9. vue-router
10. 懒加载
缺点:1.只要处罚lazyLoad函数 就会执行for循环;2.如果刚开始就滑动到图片底部,那么所有的图片都加载进来(所以上述方法需要被抛弃)
vue的自定义指令实现
10. this 面试题
10. 预编译 面试题
10. 数组去重 (es6 new Set())
javascript中常见的类数组有 arguments对象和 DOM方法的返回结果。比如 document.getElementsByTagName()
**类数组=>数组 **
1.args = Array.prototype.slice.call(arguments); [...arr]
10.js 隐氏转换(阿里面试题)valueOf join
Number类型会先调用valueOf(), String类型会先调用toString(), 如果结果是原始值,则返回原始值,否则继续用toString 或 valueOf(),继续计算,如果结果还不是原始值,则抛出一个类型错误;