这是一份前端面试题,你可以用来面试潜在的候选人或者自测。 摘抄自--[https://h5bp./Front-end-Developer-Interview-Questions/] 通用
HTML
CSS
JS
coding问题
答案: 闭包:闭包是一个函数,也是一种保护内部私有变量的方法,原理就是函数内部可以访问函数外部的变量。如果调用外部函数就能间接调用内部方法,内部方法可以访问其作用域内的变量。这就形成了闭包 其他 1. webpack 和 gulp的区别? gulp是一个流程控制工具,它是以输入文件流和输出文件文件流的形式工作的。比如要编译scss成为css,需要一个任务流程,将css压缩需要一个任务流程,将文件打上版本戳也需要一个流程。所以gulp更多地是去做任务型的工具。 而webpack是一个模块打包工具,遵循所有文件即模块的概念。对不同的文件使用不同的loader处理,可以使用多个loader处理一种文件,输出的都是一个模块的代码。可以使用插件对模块作额外的处理,如抽取公共代码、压缩代码等操作。 它们适用的场景:gulp更灵活,更适合处理一些灵活的任务,而且比较简单;webpack比较重一点,但它是配置更适合作模块化工程化的工具。webpack适合构建vue应用,gulp适合做一些灵活轻量的任何任务,如打包图片精灵。 2.vue的优缺点 他的外部优点:上手简单,目前社区比较活跃,生态比较比较完善,从打包工具到各种组件和指令层出不穷,开源的资源非常丰富。这对于公司快速开发一个新的项目是非常有利的,因为可以借助于它海量的开源资源和解决方案。 它本身的优点: 数据双向绑定,数据驱动的模式可以让我们把主要精力专注于数据和表现。试想我们曾经有一个列表数据的话,要判断列表数据是否为空,要在js里面判断列表非空啊,循环添加字符串,追加到文档等等繁琐的操作。另外一个就是语法简约优雅,对开发者非常亲近-- data双向绑定的数据集,computed 数据的计算属性自动根据元数据作相应的变化。数据渲染到dom上v-for,v-on,v-if等语法糖大大解放了我们操作dom的成本,完善的生命周期可以让我们在更细的粒度上把握组件的渲染过程,无论是请求数据,还是解绑事件都有合适的生命周期接口可以去操作。另外一个就是灵活的组件机制驱动模块化开发,组件之间可以灵活组装嵌套,可以把模块划分可以相当灵活和自由。 它的缺点:也是数据带来的。首先一个就是异步数据的同步问题,vue构建的是一个单页面应用,应用一般是没有刷新的概念的,但是浏览器有,一刷新就会有数据同步的问题。必须对所有操作的二级数据做非空判断;第二个就是同级组件的数据同步问题,在一个组件获取的异步数据,存在store里面在另一个同级组件一刷新就没了,要每个需要用到组件都去异步获取数据,这会带来请求浪费和代码重复的问题;所以必须要做持久化存储,但是官方没有持久化存储方案,持久化存储都是要靠自己实现。另外一个就是vue是自成一个生态的,像之前jquery的那种成熟的解决方案和库都没法直接用在vue上面。官方是推荐使用es6来开发的,这带来所以它也带来了一个用人要求,就是具备最少一个能够自己封装解决方案的人才,因为有相当量的业务方案需要封装而没有业界开源的解决方案可用。 vue毕竟是这两年兴起的,生态中开源的业务解决方案和库与jquery是远远不可比的,以前基本懂点js的后端就能用相应的jquery库解决了大部分问题。现在到vue的话,vue官方推荐的是用es6作为开发语言,这个带来一定的学习成本,对手写原生代码带来一定的要求,而且开源的解决方案不足不成熟,需要能根据业务进行设计具体解决方案,封装代码的人才,这对企业的人才招聘就提出了要求。 3. js 的数据类型 3.1 基本的数据类型 Undefined, Null, String, Number, Boolean, Symbol 基本数据类型的特点就是,都是按值访问的。 3.2 引用类型 除上面6种基本数据类型之外,剩下的就是引用类型,也就是Object类型。可以细分为: Object, Array, RegExp, Date, Function 等。 3.3 typeof 检测基本的数据类型 var a = 'dosir'; // string var b = 24; // number var c ;// 在chrome是'undefined',在Safari是'object’ var d = null;// object var e = new Object();// object var f = function(){};// function var g = Symbol(); // symbol ;es6 新增特性 3.4 判断数组 Array.isArray(arr) // >IE8 Object.prototype.toString.call(arr) ==='[object Array]'; 3.5 instanceof 判断引用类型 var a =/^a*/; a instanceof RegExp; //true var b = []; b instanceof Array; //true // instanceof 的原理是测试对象的原型链上是否存在一个构造函数的prototype
因为是通过prototype 来判断的,所以这个表达式并不一值返回的都是true,用来判断Array的话,并不一直靠谱。 4. 移动端和pc端开发的区别? |
|
来自: 慕容xiaolang > 《面试》