中级前端工程师要回的知识

1.什么是函数柯里化?

是把接受多个参数的函数变换成接受一个单一参数的函数,是典型的闭包函数

2.call、apply、bind区别?

相同点:

        作用一致、都是修改this的指向。

不同点:

        (1)传参方式不同,call()是按照顺序传参,apply()是通过数组/伪数组传参。

        (2)执行机制不同,call()和apply()是立即执行函数,bind()不会立即执行函数,而是会返回一个修改过this的新函数。

call(修改后的this,形参1,形参2...)

apply(修改后的this,数组/伪数组)

bind(修改后的this) bind不会立即执行函数,而是返回一个修改之后的函数。

3.说说Event Loop.

首先js是单线程,js执行程序的过程中有优先级之分,会先执行js线程的同步任务,然后再执行微任务(promise.then,process.nextTickObject.observeMutationObserver),最后执行宏任务scriptsetTimeOutsetIntervalsetImmediate

经典例子:

setTimeout(function(){
    console.log('1')
});
new Promise(function(resolve){
    console.log('2');
    resolve();
}).then(function(){
    console.log('3')
});
console.log('4');
new Promise(function(resolve){
    console.log('5');
    resolve();
}).then(function(){
    console.log('6')
});
setTimeout(function(){
    console.log('7')
});
function bar(){
    console.log('8')
    foo()
}
function foo(){
    console.log('9')
}
console.log('10')
bar()
  • 最终结果:2,4,5,10,8,9,3,6,1,7

vue响应式原理?(双向绑定原理)

响应式原理:采用数据劫持结合发布-订阅者模式的方式,通过Object.defineProperty()来劫持data里面各个属性的setter和getter,在数据变动的时候,触发set方法,检测到数据发生变化,会发布消息给订阅者,触发相应的监听回调,生成新的虚拟DOM树,视图更新。

性能优化方法?是否在项目中应用过一些优化方法?

说到性能优化,宏观上目前基本都被webpack 打包工具解决了,当我们使用webpack5的版本后,基本是开箱机带的功能,比如压缩js,和css,图片压缩,CDN=加速,按需加载。

项目中主要运用到的优化,主要有用性能优化api的意识,比如项目运用到的keep-alive缓存页面,增加访问速度,使用场景:A页面跳转B页面,需要纪录页面滚动的当前位置,某个页面具有多元素的页面,比如详情页面;节流防抖也算是性能优化,减少重绘和重徘,

这时面试官一般会问你会写节流防抖吗,什么是重绘和重徘:

  • 回流
    • render树中一部分或全部元素需要改变尺寸、布局、或着需要隐藏而需要重新构建,这个过程叫做回流
    • 回流必将引起重绘
  • 重绘
    • render树中一部分元素改变,而不影响布局的,只影响外观的,比如颜色。该过程叫做重绘
  • 页面至少经历一次回流和重绘(第一次加载的时候)

判断对象为空的方法有?

JSON.stringfy(obj) === '{}'

object.keys(obj).length === 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值