HTML
CSS
JS
coding问题
add(2, 5); // 7add(2)(5); // 7
"i'm a lasagna hog".split("").reverse().join("");
( window.foo || ( window.foo = "bar" ) );
答案:
闭包:闭包是一个函数,也是一种保护内部私有变量的方法,原理就是函数内部可以访问函数外部的变量。如果调用外部函数就能间接调用内部方法,内部方法可以访问其作用域内的变量。这就形成了闭包
其他
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.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
function C(){} var o = new C();
o instanceof C; // true,因为 Object.getPrototypeOf(o) === C.prototype
因为是通过prototype 来判断的,所以这个表达式并不一值返回的都是true,用来判断Array的话,并不一直靠谱。
4. 移动端和pc端开发的区别?
联系客服