前言接上一篇前端笔试题面试题记录(上)。趁着清明放假,我也把上一篇的剩余部分写出来,因为最近比较忙,这篇文章耽误了很久。银四才刚刚开始,应该还有一些小伙伴还在找工作。不算太晚。希望本文能对这些朋友有所帮助。看看我的个人博客:obkoro1.com本文主要内容如下:面试题QA面试中遇到的一些小题Vue系列题面试题QAQ:ES6的let和const变量声明你懂吗?和ES5的var有什么区别?let是同一个作用域:var可以重复声明变量,但let不能重复声明同一个变量。es5是函数作用域,即一个函数是一个作用域,而es6是块级作用域(花括号'{thisisascope}'),如:if和for花括号都是一个作用域。var有变量提升,可以在变量声明前使用,let没有变量提升,在变量前使用会报错。让我们有一个暂时的死区。阮一峰的es6介绍文档是这样解释的:constconst的很多特性和let是一样的,包括:不可重复声明,不可变量提升,临时死区,都是块级函数区。与let命令也有一些区别:const在声明时必须赋值,否则会报错。不能更改用const声明的常量。这里的常量是指:数值、字符串、布尔值。对于引用类型(数组和对象),const只能保证指针是固定的。至于数组和对象的内部变化是否变化,const无法控制Q:css的优先级。这类题也经常出现在笔试题中,具体题型记不太清楚。权重优先级:!important>style(1000)>id(100)>class(10)!important不管权重是最高优先级,总是takeimportant。如果两个选择器作用于同一个元素,则计算权重值并相加。权重最高的属性生效。(笔试题中出现过cascadingclassidselectors,作用于同一个tag,最后问哪个cssattribute生效)我找到一篇关于cssweights的文章不错,你可以看看感兴趣。你应该知道的一些事情-CSS权重Q:继承函数对象的实例方法,原型继承。函数对象的继承一般会出现在面试的笔试题边上,我遇到过好几次。这是一个答案。functionfather(name){//父函数this.name=name|'koro1';this.code=function(){//父类实例方法console.log(this.name+'coding');}};father.prototype.add=function(food){//父类的原型方法console.log(this.name+'eat'+food);}functionson(name){//子函数father.call(this);//给子类绑定this,绑定父类的实例方法代码(原型方法add还没有绑定)this.name=name||'OBKoro1';}son.prototype=newfather();//将父类的原型方法绑定到子类中实现继承varsonVar=newson('faker');//这里也可以传参nameson.prototype.constructor=son;//修复构造函数的指针指向console.log(sonVar.code());console.log(sonVar.add());//可以调用父类的方法Q:通过reduce函数实现简单的数组求和,例子数组[3,4,8,0,9];这是一道简单的笔试题。下面写了两种方法,一种是普通的遍历方法,一种是使用eval()方法。letreduce=(arr)=>{//第一次正常遍历。让数=0;for(let[index,value]ofarr.entries()){num+=value;}返回数;}让reduce=(arr)=>eval(arr.join("+"));//第二个//join()方法将数组元素放入字符串上面的栗子中:arr.join("+")得到字符串:'3+4+8+0+9';//eval()函数计算字符串,并执行其中的JavaScript代码//提醒:有一个reduce()数组求和的方法,添加这个方法让result=[3,4,8,0,9].reduce((total,value)=>{//这两个参数是默认参数,不需要设置returntotal+value});问:call()和apply()有什么区别?call()和apply()的第一个参数会作为函数内部this的值,用来改变函数的this点。call和apply的区别在于call()方法接受以逗号分隔的参数作为后面的参数,而apply()接受参数数组作为后面的参数。从其他博客看到一个简单的记忆方法:fromCincalltocomma-separated(逗号分隔),fromAinapplytoarray(数组)。Q:position的值有哪些?效果如何?静止的。默认值不脱离文档流,top、right、bottom、left等属性不生效。相对的。不脱离文档流,按照自己的定位走偏。当子元素设置为absolute时,它会根据它进行偏差。绝对。脱离文档流,根据top、right、bottom、left等属性偏移在正常文档流中的位置。固定的。通过浏览器窗口定位,当滚动条出现时,不会随之滚动。Q:如何实现闭包?闭包的作用是什么?当一个函数嵌套在另一个函数中时,嵌套函数的作用域就是一个闭包。作用:创建私有变量,减少全局变量,防止变量名污染。外部作用域的变量是可以操作的,变量不会被浏览器回收,变量的值会被保存下来。Q:请摘录2017-05-15T09:10:23Europe/Paris["2017","05","15","09","10","23"]的成绩,这是一道笔试题,关于规律性,看他们想要的内容就知道了。要提取所有数字,您可以编写一个只获取数字的正则表达式。让str='2017-05-15T09:10:23欧洲/巴黎';让arr=str.match(/\d{1,}/g);//match会返回一个数组,//\d查找数字//{1,}表示至少重复几次///g表示全局搜索问:请描述Promise的使用场景,'Promise'的问题解决了异步操作的当前解决方案。这是一道笔试题,这是我当时的答案。Promise使用场景:ajax请求、回调函数、复杂操作判断。Promise诞生于ES6,解决异步编程。异步操作解决方案:Promise、Generator、timer(不知道算不算),以及ES7的异步面试中遇到的一些小问题:这里主要是面试中遇到的一些小问题,随便几句大家可以看看在可以清楚解释的事情上。函数参数变量提升functionaa(val){//函数参数的变量也会被提升console.log(val);//'函数参数传递'varval='变量声明';console.log(val);//'变量声明'}aa('函数参数传递');js定义对象有哪些方法?varobj=newObject();//新建一个对象varobj={name:"OBKoro1"}//对象字面量写字符串数字转换操作的问题console.log(1+'2'+'2');//122console.log(+'1'+-'2'+'2');//-12console.log('A'+'B'+'2');//AB2console.log('A'-'B'+2);//NaN//都是要相加的数字,否则以字符串形式拼接。//相减只能是两个数字,字符串也会被转成数字。如果不能转换,这个值就是NaNsplit()和join()的差值?split()是把字符拆分成数组,join()把数组转换成字符串pop()push()unshift()shift()?pop()删除并返回数组的最后一个元素。push()将一个或多个元素添加到数组的末尾并返回新的长度。unshift()方法将一个或多个元素添加到数组的开头并返回新的长度。shift()方法用于从数组中删除第一个元素并返回第一个元素的值。判断一个数是否为整数函数isIntefer(x){returnx%1===0;//returnBoolean}如何将字符串转换为数字,如:12.3b?varnum=parseFloat('12.3b')什么是保证金合并?当两个垂直边距相遇时,它们形成一个边距,其组合高度等于两个组合边距高度中的较大者。Q:你常用的git/svn命令行有哪些?什么是行内元素,什么是块元素?css的选择器是什么?自己google一下,类似css3的新属性,H5的新属性等等,有时间的话稍微背一下,都遇到过。vue系列题:面试过程中很少被问到框架的问题,很多都是在笔试题中遇到的。在介绍我的项目的时候,有时候我会解释一下这里用到了什么Vue的技术。这个时候,面试官可能会一路问Vue,一般来说,问题不会太深。下面是笔试真题:vue-router是如何定义动态路由的?如何获取传递的动态参数?定义:path:'a/:value'获取:this.$route.params.value。说出至少4个vue命令及其用法。vue文档显示了13条说明vue如何绑定事件。@click="事件名称"v-show和v-if指令有什么异同?1、v-if是删除/添加dom标签,不占用文档位置。v-show切换css的display属性来控制显示和隐藏,同时也占据文档位置。2、v-if会删除dom标签,所以v-if的性能消耗会比较高。如果需要经常切换,用v-show会更好。
