2019年JavaScript前端面试题

2019年JavaScript前端面试题

一、简答题

  1. js里怎样判断变量类型,typeof可以区分哪些不可以区分哪些。

  2. 数组去重有几种方案,或者找出重复的并排序。

  3. prototype 实现原理。

  4. 对webSocket是否了解,怎样实现前后端通信?

  5. 浏览器跨域怎么产生的,解决方案有哪些,各有什么优缺点。

  6. 移动端的适配问题,像素比,rem相对于什么的长度。

  7. css实现宽度为屏幕20%的正方形。

  8. attribute 和property 的区别。

  9. 标准模式和混合模式的区别。

  10. cookie ,sessionStorage,localStorage的区别

  11. call,appy,bind的区别,怎么实现bind

  12. Vue实现兄弟组件间传值有几种方式

  13. v-if和v-show的区别。

  14. vue中 keep-alive用法。

  15. vuex中四大模块怎么传递的,component,action,mutation,state,及action和mutation的区别,action是异步的吗?

    vuex模块间的调度关系

    1. vue中$route和$router的区别
    2. vue中router的hash和history模式有什么不同及实现原理,history后端需要做什么配置才支持。
    3. 写出vue中至少四个v-指令,说明其作用。
    4. vue和react相同点与不同点。

二、编程题

  1. 以下程序输出结果
	for(let i=0;i<5;i++){
		setTimeout(function(){
			console.log(i)
		},1000)
	}
	
	for(var i=0;i<5;i++){
		setTimeout(function(){
			console.log(i)
		},1000)
	}
	 
	 for(leti=0;i<5;i++){
	 	cos(i);
	 }
	 for(var i=0;i<5;i++){
	 	cos(i);
	 }
	 function cos(i){
	 	setTimeout(function(){
	 		console.log(i);
	 	})
	 }
	结果:0,1,2,3,4和5,5,5,5,5和0,1,2,3,4和0,1,2,3,4
	知识点:
	let 和var的区别
	let定义块级作用域变量
	var 定义函数或对象内的全局变量,以及函数里定义的变量满足闭包,即在外部访问不到
	函数里定义的变量存在于栈中运行完成即变量销毁
  1. 以下程序输出结果
	let a={c:1};
	let b=a;
	a.x=a={c:2}
	console.log(a.x);
	console.log(b.x);
	结果undefined和{c:2}
	知识点:
	两个等号相当于a.x={c:2};a={c:2},补充var a=b=1,相当于var a=1;b=1
	第一段代码改变了b对象的引用;第二段代码改变了a的地址但b并没有变化。
  1. 对字符串get-element-by-id传成驼峰命名
	//普通方法,利用数组循环
	function changeStr(str){
		var arr=str.split("-");
		for(var i=1;i<arr.length;i++){
			arr[i]=arr[i].charAt(0).toUpperCase() + arr[i].substr(1,arr[i].length);
		}
		return arr.join("");
	}
	changeStr("get-element-by-id")
	
	//利用正则表达式函数replace的传函数的用法
	function changeStrO(str){
		return str.replace(/-(\w)/g,function ($0,$1){
        	return $1.toUpperCase();
    	});
	}
	changeStrO("get-element-by-id")
  1. 异步题目
var promise=new Promise(
	function(resolve,reject){
		console.log(1);
		resolve();
		console.log(2)
});
promise.then((data)=>{console.log(3)})
console.log(4)

结果为:1,2,4,3

  1. 变量提升题
test()
var b=20;
function test(){
	console.log(b)
	if(!b){
		var b=10;
	}
	console.log(b)
}

结果:undefined 10

  1. 匿名函数题
var test=(function(i){
	this.x=i
	return function(y){
		return this.x+y
	}
}(1,2))
test(3)

结果为:4

  1. vue中filter实现自定义命令,过滤数组保留2,3或4位小数
  2. 动画题,实现一个div元素,1秒扩大1倍,下1秒还原,如此循环执行3次。
div
{
width:100px;
height:100px;
background:red;
animation:myfirst 3s;
animation-iteration-count:3;
-webkit-animation-iteration-count:3; /* Safari 和 Chrome */
}

@keyframes myfirst
{

0% {transform: scale(1);}
50%{transform: scale(2)}
100% {transform:scale(1);}
}
  1. 样式题,纯样式一个标签怎么实现六边形,实现鼠标单击展开下拉菜单。
  2. 样式题,实现插入两行文本,超出内容时用三点表示,文本内容靠右等等。
  3. 一行代码实现筛选出数组的重复元素,并取出前十个。
  4. 二叉树找出一条完整路径,使得路径上所有节点和等于给定的总和。
  5. 异步请求题,函数入参给定并发数max,和所有请求路径urls数组,回调函数callback,要求max控制并发总数,在所有并发请求完成后调用回调函数,可以用fetch实现

后续持续更新…

猜你喜欢

转载自blog.csdn.net/qq_29510269/article/details/88702501