ES5 ES6分别实现函数柯里化及应用,如何化身BAT面试收割机

17 阅读1分钟

Vue 面试题

1.Vue 双向绑定原理 2.描述下 vue 从初始化页面–修改数据–刷新页面 UI 的过程? 3.你是如何理解 Vue 的响应式系统的? 4.虚拟 DOM 实现原理 5.既然 Vue 通过数据劫持可以精准探测数据变化,为什么还需要虚拟 DOM 进行 diff 检测差异? 6.Vue 中 key 值的作用? 7.Vue 的生命周期 8.Vue 组件间通信有哪些方式? 9.watch、methods 和 computed 的区别? 10.vue 中怎么重置 data? 11.组件中写 name 选项有什么作用? 12.vue-router 有哪些钩子函数? 13.route 和 router 的区别是什么? 14.说一下 Vue 和 React 的认识,做一个简单的对比 15.Vue 的 nextTick 的原理是什么? 16.Vuex 有哪几种属性? 17.vue 首屏加载优化 18.Vue 3.0 有没有过了解? 19.vue-cli 替我们做了哪些工作?

开源分享:docs.qq.com/doc/DSmRnRG…

args = args || [];

return function() {

let subArgs = args.slice(0);

// 拼接得到现有的所有参数

for (let i = 0; i < arguments.length; i++) {

subArgs.push(arguments[i]);

}

// 判断参数的长度是否已经满足函数所需参数的长度

if (subArgs.length >= length) {

// 如果满足,执行函数

return fn.apply(this, subArgs);

} else {

// 如果不满足,递归返回科里化的函数,等待参数的传入

return curry.call(this, fn, subArgs);

}

};

}

ES6


function curry(fn, ...args) {

return fn.length <= args.length ? fn(...args) : curry.bind(null, fn, ...args);

}

应用

=====================================================================

1.参数确定(累加参数确定)


function sum(a,b,c,d){

return a+b+c+d

}

let curried = curry(sum)

console.log(curried(1)(2)(3)(4))//10

console.log(curried(1,2)(2,4))//9

2.不确定参数实现sum([1,2,3…])无限累加

框架相关

原生JS虽能实现绝大部分功能,但要么就是过于繁琐,要么就是存在缺陷,故绝大多数开发者都会首选框架开发方案。现阶段较热门是React、Vue两大框架,两者工作原理上存在共通点,也存在一些不同点,对于校招来说,不需要两个框架都学得特别熟,一般面试官会针对你简历中写的框架进行提问。

在框架方面,生命周期、钩子函数、虚拟DOM这些基本知识是必须要掌握的,在学习的过程可以结合框架的官方文档

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

Vue框架

知识要点: 1. vue-cli工程 2. vue核心知识点 3. vue-router 4. vuex 5. http请求 6. UI样式 7. 常用功能 8. MVVM设计模式

React框架

知识要点: 1. 基本知识 2. React 组件 3. React Redux 4. React 路由